我想在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并将其放在那里,但它没有显示任何内容,我知道它们是在创建时分配的,但如果它已经存在,它能够显示它吗?
答案 0 :(得分:1)
您可以创建一个返回对象id
的方法。
models.py
class POS(models.Model):
# your fields...
def get_id(self):
return self.id
现在,将此方法添加到fields
类的readonly_fields
和PosInLine
。
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',)