Django Admin在编辑时将extra设置为0

时间:2016-10-17 09:40:08

标签: django django-admin

在我的模型中设置extra = 1始终显示1个空字段。插入新项目时可以,但我不想在编辑时显示额外的空白字段。我怎样才能做到这一点?

假设我们的模型是这样的:

class Foo(models.Model):
    bar = models.ForeignKey(Bar, models.CASCADE, related_name='bars')
    title = models.CharField(_('Title'), max_length=255)
    body = models.TextField(_('Body'))
    __str__(self):
        return '%s' % (self.title)

class FooInline(admin.StackedInline):
    model = Foo
    extra = 1 #Also shows 1 extra empty field while editing.
              #I don't want to show if there is already a non-empty field


class FooAdmin(admin.ModelAdmin):
    prepopulated_fields = {'slug': ('title',)}
    inlines = [
        FooInline
    ]

1 个答案:

答案 0 :(得分:5)

重写get_extra方法,而不是为额外的类成员设置值。

  

返回要使用的额外内联表单的数量。默认情况下,返回   InlineModelAdmin.extra属性。

     

重写此方法以编程方式确定额外的数量   内联表格。例如,这可以基于模型实例   (作为关键字参数obj传递):

类似的东西:

def get_extra(self, request, obj=None, **kwargs):
    if obj.bar_set.count() :
        return 0
    else: 
        return 1