我构建了这个包含通用外键的模型:
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_inlineformset_factory中传递了_ delete=False
arg,但我总是在管理员change_form中看到Delete
复选框。
以下是一个示例:http://img8.imageshack.us/img8/3323/screenshotbe.png
您知道如何删除此复选框吗?
谢谢:)
答案 0 :(得分:34)
也许这是09后的一项功能,但你可以在不覆盖__init__()
方法的情况下指定:
class StupidCarOptionsInline(admin.StackedInline):
model = models.StupidOption
form = StupidCarOptionAdminForm
extra = 0
can_delete = False
答案 1 :(得分:12)
更新2016:根据Stan的回答,django的现代版本允许您在can_delete = True
子类上设置GenericStackedInline
,因为它继承自InlineModelAdmin
我之前遇到过这种情况 - 由于某种原因,传递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