2015-10-29 28 views
7

Liste_editable'ını nesne başına isteğe bağlı olarak yapmak için herhangi bir yer var mı? Örneğin readonly fields özniteliği bu seçeneğe sahiptir, bu da changelist_view öğesini etkilemez.Django koşullu yönetici listesi_editable

class MyAdmin(admin.ModelAdmin): 
    readonly_fields = ('foo',) 

    def get_readonly_fields(self, request, obj=None): 
     fields = super(MyAdmin, self).get_readonly_fields(request, obj=obj) 

     if obj.status == 'CLOSED': 
      return fields + ('bar',) 
     return fields 

Aynı şey, list_display ve diğer bazı öznitelikler için elde edilebilir. 'Get_list_editable_fields' yöntemi yok gibi görünüyor.

Bazı satırların açıkça değiştirilememesini istiyorum, ancak kaba bir hatayı yükseltmekten başka bir işe yaramıyor gibi görünüyor. Bu özellik hakkında herhangi bir belge bulamadım ya

Bir widget'ı bir liste_display alıcısı aracılığıyla yapmak mümkün olabilir mi? Alasdair geri bildirimini kullanarak

class MyAdmin(admin.ModelAdmin): 
    list_display = ('get_bar',) 
    list_editable = ('get_bar',) 

    def get_bar(self, obj): 
     return widget or str(obj.bar) # ??? 
    get_bar.allow_tags = True 

güncelleme: Dediğiniz gibi

def get_changelist_formset(self, request, **kwargs): 
    """ 
    Returns a FormSet class for use on the changelist page if list_editable 
    is used. 
    """ 
    # I run through this code for each row in the changelist, but there's nothing in kwargs, so I don't know how to use the instance as a guide to which fields should be in list_editable? 

    defaults = { 
     "formfield_callback": partial(self.formfield_for_dbfield, request=request), 
    } 
    defaults.update(kwargs) 
    return modelformset_factory(
     self.model, self.get_changelist_form(request), extra=0, 
     fields=self.list_editable, **defaults 
    ) 

cevap

1

, hiçbir get_list_editable yöntem yoktur.

get_changelist_formset yöntemini geçersiz kılmayı deneyin. Tüm yöntemi çoğaltmanız ve modelformset_factory'a iletilen alanların listesini değiştirmeniz gerektiğini düşünüyorum.

+0

ben yönteminde son örneğini nasıl anlamıyorum, ben her satır için yöntemiyle çalışır, ancak kwargs olduğunu boş? benim güncel soru görmek – trb

+0

Cevap nedir, ben yönetici kodu içinde oldukça derin emin değilim! Bunun yerine 'get_changelist_form'unu da geçersiz kılmanız gerekebilir. İyi şanslar! – Alasdair

+0

Bu beni doğru yolda ayarladı .. Ben iki kez admin (proxy model hack gerektiren) modelini kayıt ve kendi yönetici kural kümesi oluşturma sona erdi. Bu gereksinim gerçekten django admin sınırlarını vurur :-) – trb

0

Ayrıca, changelist_view geçersiz kılmak ve böyle bir şey yapabileceğini:

def changelist_view(self, request, extra_context=None): 
     resp = super(CustomModelAdmin, self).changelist_view(request, extra_context) 
     if something: 
      resp.context_data['cl'].formset = None 

     return resp