django admin添加代表性id字段

时间:2014-02-15 12:08:29

标签: python django django-forms django-admin

我正在尝试向django管理员更改表单(视图)添加一个只读(代表性)id字段,例如我有这个模型:

class Foo(models.Model):
    name = models.CharField(max_length=20)

    def display_id(self):
        # represent the AutoField (id) as "0001"

        return str(self.id).zfill(4)


class FooAdminForm(forms.ModelForm):
    display_id = forms.IntegerField(widget=ReadOnlyWidget)

    class Meta:
        model = Foo


class FooAdmin(admin.ModelAdmin):
    form = FooAdminForm

    fieldsets = (
        (None, {'fields': ('name',)}),
        ('Extra info', {'fields': [
            ('display_id',),
        ]}),
    )

这里有一些问题和非人:

  • 表单上没有AutoFields(有充分理由),所以我如何才能正确显示ID
  • 未保存的实例没有可依赖的ID,我想在添加新条目时显示“n / a”
  • 想要将display_id字段添加到我的模型

我试过了:

  • 覆盖(模型)表单的init,但这往往会变得非常复杂

应该/我可以:

  • 以某种方式在ReadOnlyWidget修复此行为?
  • 只需使用常规Form代替ModelForm即可避免数据/表格冲突。

1 个答案:

答案 0 :(得分:0)

您可以将readonly_fields添加到您的FooAdmin:

class FooAdmin(admin.ModelAdmin):
    form = FooAdminForm
    readonly_fields('id',)

    fieldsets = (
        (None, {'fields': ('name',)}),
        ('Extra info', {'fields': [
            ('display_id',),
        ]}),
    )