Django:在 GenericStackedInline 上禁止 can_delete
Posted
技术标签:
【中文标题】Django:在 GenericStackedInline 上禁止 can_delete【英文标题】:Django: disallow can_delete on GenericStackedInline 【发布时间】:2010-12-01 01:05:44 【问题描述】:我已经构建了这个包含通用外键的模型:
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 中传递了 can_delete=False
参数,但我总是在我的管理员 change_form 中看到一个 Delete
复选框。
这里是一个例子:http://img8.imageshack.us/img8/3323/screenshotbe.png
你知道如何去掉这个复选框吗?
谢谢你:)
【问题讨论】:
【参考方案1】:2016 年更新:根据 Stan 在下面的回答,现代版本的 django 允许您在 GenericStackedInline
子类上设置 can_delete = True
,因为它继承自 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
【讨论】:
很抱歉这么晚才回复。它现在正在工作。我可能会在 django 网站上开一张关于它的新票。谢谢你。 ;-)【参考方案2】:也许这是 09 后的功能,但您可以在不覆盖 __init__()
方法的情况下指定它:
class StupidCarOptionsInline(admin.StackedInline):
model = models.StupidOption
form = StupidCarOptionAdminForm
extra = 0
can_delete = False
【讨论】:
"can_delete = False" 正是我想要的。 这是最好的答案以上是关于Django:在 GenericStackedInline 上禁止 can_delete的主要内容,如果未能解决你的问题,请参考以下文章
在没有 django 表单的 django 模板上工作 [关闭]