23

我已经构建了这个包含通用外键的模型:

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]

但是,尽管delete=False在 generic_inlineformset_factory 中传递了 can_arg,但我总是Delete在我的管理员 change_form 中看到一个复选框。

这是一个例子:http: //img8.imageshack.us/img8/3323/screenshotbe.png

你知道如何去掉这个复选框吗?

谢谢 :)

4

2 回答 2

45

也许这是 '09 后的功能,但您可以在不覆盖__init__()方法的情况下指定它:

class StupidCarOptionsInline(admin.StackedInline):
    model = models.StupidOption
    form = StupidCarOptionAdminForm
    extra = 0
    can_delete = False
于 2011-02-04T08:33:29.373 回答
14

2016 年更新:根据 Stan 在下面的回答,现代版本的 django 允许您设置can_delete = TrueGenericStackedInline类,因为它继承自InlineModelAdmin


我之前遇到过这个问题——由于某种原因,将 can_delete 作为参数传递是行不通的,但是在表单集的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
于 2009-09-24T20:48:45.190 回答