我有一个简单的模型:
class Tier(models.Model):
number_groups = models.PositiveIntegerField(null=True, blank=True)
哪个可以是另一个模型的FK:
class Account(models.Model):
tier = models.ForeignKey(
AccountTier,
null=True,
on_delete=models.PROTECT)
number_groups = models.PositiveIntegerField(null=True, blank=True)
可以在number_groups
模型中覆盖Account
属性。这允许我的用户在管理页面中从预定义的Tier实例列表中选择。有时,用户可能希望将特定值设置为number_groups
,该值应仅存在于帐户实例中。
我在想一个直接的方法是使用Account
模型中的方法:
def number_groups(self):
if self.number_groups:
return self.number_groups
elif self.tier:
return self.tier.number_groups
return self.number_groups
但是使用这种方法我不能使这个字段出现在Admin中,它被定义:
@admin.register(Account)
class AccountAdmin(admin.ModelAdmin):
fields = ('number_groups',)
让管理员正确显示此字段并允许在Account
实例中覆盖该字段的最佳方法是什么?
答案 0 :(得分:1)
可以向admin.ModelAdmin
添加自定义字段:
@admin.register(Account)
class AccountAdmin(admin.ModelAdmin):
fields = ('get_number_groups', )
readonly_fields = ('get_number_groups', )
def get_number_groups(self, obj):
return obj.number_groups()
# Optional:
# get_number_groups.short_description = 'foobar'