2009-09-24 18 views
19

Genel bir yabancı anahtar içeren bu modeli kurdum:Django: GenericStackedInline'da can_delete izin vermez

class MyModel(models.Model): 
    content_type = models.ForeignKey(ContentType, verbose_name=_('content type')) 
    object_id = models.PositiveIntegerField(_('object id')) 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

Daha sonra herhangi bir ModelAmin sınıfına koymak için genel bir yığın satır içi hazırladım:

class MyModelStackedInline(generic.GenericStackedInline): 
    model = MyModel 
    formset = generic.generic_inlineformset_factory(MyModel, can_delete=False) 
    extra = 0 

class SomeOhterModelAdmin(admin.ModelAdmin): 
    inlines = [MyModelStackedInline] 

Ancak, delete=False arg, generic_inlineformset_factory içinde geçti, admin change_form'umda her zaman bir Delete onay kutusunu görüyorum.

İşte bir örnek: http://img8.imageshack.us/img8/3323/screenshotbe.png

Bu onay kutusunun nasıl kaldırılacağını biliyor musunuz?

Teşekkür ederim :)

cevap

12

Güncelleme 2016 :) Teşekkür: Aşağıdaki Stan'in Yanıt başına kadar, django modern versiyonları da InlineModelAdmin


devraldığı gibi koşuyorum ettik GenericStackedInline alt sınıf üzerinde can_delete = True ayarlayalım Buna daha önce - can_delete bir argüman olarak geçen bazı nedenlerden ötürü işe yaramazsa, ancak formset'in init yöntemiyle ayarlanması yöntemini yapar. Yönetici satır içi sınıfında sonra

class MyInlineFormset(generic.generic_inlineformset_factory(MyModel)): 
    def __init__(self, *args, **kwargs): 
     super(MyInlineFormset, self).__init__(*args, **kwargs) 
     self.can_delete = False 

: Bu deneyin

class MyModelStackedInline(generic.GenericStackedInline): 
    model = MyModel 
    formset = MyInlineFormset 
    extra = 0 
+0

Bununla bir şansın var mı? – Greg

+0

(Çok) geç cevap verdiğim için üzgünüm. Şimdi çalışıyor. Muhtemelen django web sitesinde yeni bir bilet açacağım. Teşekkür ederim. ;-) – user176455

29

Belki O bir post '09 özelliktir, ancak belirtebildiklerinden __init__() yöntemi geçersiz olmadan:

class StupidCarOptionsInline(admin.StackedInline): 
    model = models.StupidOption 
    form = StupidCarOptionAdminForm 
    extra = 0 
    can_delete = False 
+3

"can_delete = False" tam da aradığım şeydi. – mbarkhau

+1

Bu en iyi anwer –

İlgili konular