Stackedinline与字段id

时间:2016-01-23 18:10:36

标签: django django-models

我想在django admin创建stackinline,但我有一个问题我有ID,默认情况下是uuid4但是当我在stackinline fields=('id')指定它时说:

  

FieldError为POS

指定的未知字段(id)

这是我的模特:

class POS(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(verbose_name='Ime', max_length=24)
    company = models.ForeignKey(Company)

然后在admin.py

class PosInLine(admin.StackedInline):
    model = POS
    extra = 0
    fields = ('id', 'name',)

我甚至尝试使用readonly_fields并将其放在那里,但它没有显示任何内容,我知道它们是在创建时分配的,但如果它已经存在,它能够显示它吗?

2 个答案:

答案 0 :(得分:1)

您可以创建一个返回对象id的方法。

models.py

class POS(models.Model):
    # your fields...

    def get_id(self):
        return self.id

现在,将此方法添加到fields类的readonly_fieldsPosInLine

admin.py

class PosInLine(admin.StackedInline):
    model = POS
    extra = 0
    fields = ('get_id', 'name',)
    readonly_fields = ('get_id',)

注意:为新对象显示的id不是正确的 id。保存该对象后,将为该对象分配一个新的正确 id

答案 1 :(得分:1)

如果您的ID也是主键,则可以显示它:

class PosInLine(admin.StackedInline):
    model = POS
    extra = 0
    fields = ('name',)
    readonly_fields = ('pk',)