use*_*455 21 python generics django django-admin 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', 'object_id')
Run Code Online (Sandbox Code Playgroud)
接下来我制作了一个通用的堆叠内联,将它放在任何ModelAmin类中:
class MyModelStackedInline(generic.GenericStackedInline):
model = MyModel
formset = generic.generic_inlineformset_factory(MyModel, can_delete=False)
extra = 0
class SomeOhterModelAdmin(admin.ModelAdmin):
inlines = [MyModelStackedInline]
Run Code Online (Sandbox Code Playgroud)
但是,尽管delete=False在generic_inlineformset_factory中传递了can_ arg ,但我总是Delete在管理员change_form中看到一个复选框.
这是一个例子:http://img8.imageshack.us/img8/3323/screenshotbe.png
你知道如何删除这个复选框?
谢谢 :)
Sta*_*tan 35
也许这是一个'09后的功能,但您可以指定,但不覆盖该__init__()方法:
class StupidCarOptionsInline(admin.StackedInline):
model = models.StupidOption
form = StupidCarOptionAdminForm
extra = 0
can_delete = False
Run Code Online (Sandbox Code Playgroud)
Gre*_*reg 13
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
Run Code Online (Sandbox Code Playgroud)
然后在你的管理内联类:
class MyModelStackedInline(generic.GenericStackedInline):
model = MyModel
formset = MyInlineFormset
extra = 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4703 次 |
| 最近记录: |