Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django管理员添加代表性id字段_Python_Django_Django Forms_Django Admin - Fatal编程技术网

Python django管理员添加代表性id字段

Python django管理员添加代表性id字段,python,django,django-forms,django-admin,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 FooAdminFo

我正在尝试向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',),
        ]}),
    )
这里有一些问题和禁忌:

  • 表单上没有自动字段(这是有充分理由的),因此如何才能正确显示id
  • 未保存的实例没有可依赖的id,我希望在添加新条目时显示“n/a”
  • 我不想在我的模型中添加显示id字段
我试过:

  • 重写(模型)表单的init,但这会变得非常复杂
我应该/可以:

  • 以某种方式在my
    ReadOnlyWidget
    中修复此行为
  • 只需使用常规的
    表单
    而不是
    模型表单
    ,以避免数据/表单冲突

您可以向FooAdmin添加只读字段:

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

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

这是行不通的,display_id是一个属性,“id”也是一个自动字段,因此它在ModelForm上不可用