Python Django:不允许在GenericsTackedLine上删除
我构建了一个包含通用外键的模型:Python Django:不允许在GenericsTackedLine上删除,python,django,django-admin,generics,formset,Python,Django,Django Admin,Generics,Formset,我构建了一个包含通用外键的模型: 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',
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')
接下来,我制作了一个通用的堆叠内联,将其放入任何ModelAmin类中:
class MyModelStackedInline(generic.GenericStackedInline):
model = MyModel
formset = generic.generic_inlineformset_factory(MyModel, can_delete=False)
extra = 0
class SomeOhterModelAdmin(admin.ModelAdmin):
inlines = [MyModelStackedInline]
然而,尽管在generic\u inlineformset\u工厂中传递了can\ucode>delete=Falsearg,但我总是在我的管理更改表单中看到一个delete
复选框
以下是一个例子:
您知道如何删除此复选框吗
谢谢:)2016年更新:根据Stan下面的回答,django的现代版本允许您设置子类,因为它继承自
我以前遇到过这种情况——出于某种原因,将can_delete作为参数传递是不起作用的,但在formset的init方法中设置它会起作用。试试这个:
class MyInlineFormset(generic.generic_inlineformset_factory(MyModel)):
def __init__(self, *args, **kwargs):
super(MyInlineFormset, self).__init__(*args, **kwargs)
self.can_delete = False
然后在您的管理内联类中:
class MyModelStackedInline(generic.GenericStackedInline):
model = MyModel
formset = MyInlineFormset
extra = 0
也许这是一个'09年后的功能,但您可以在不重写
\uuuu init\uuuu()
方法的情况下指定:
class StupidCarOptionsInline(admin.StackedInline):
model = models.StupidOption
form = StupidCarOptionAdminForm
extra = 0
can_delete = False
很抱歉这么晚才回答。它正在工作。我可能会在django网站上开一张新票。谢谢“can_delete=False”正是我想要的。这是最好的答案