我在 models.py 有两个班:
class ModelOne(models.Model):
field_one = models.CharField(max_length=100)
field_two = models.CharField(max_length=200)
field_three = models.CharField(max_length=300)
[...] #other fields
def __unicode__(self):
return self.field_one
class ModelTwo(models.Model):
relation_model_one = models.ForeignKey(ModelOne)
other_field = models.CharField(max_length=50)
[...]
def __unicode__(self):
return self.relation_model_one.field_one
你在admin.py的管理是这样的:
class ModelTwoInline(admin.StackedInline):
model = ModelTwo
extra = 0
class ModelOneAdmin(admin.ModelAdmin):
list_display = ('field_one', 'field_two', 'field_three',)
inlines = [ModelTwoInline]
My question is: 我可以在ModelOne的list_display中显示ModelTwo的字段吗? (list_filter和search_fields相同)
我需要这个,因为我有许多与主类相关的子类!
2 回答
您可以通过使用
@property
装饰器编写实例方法在list_display
中显示您想要的任何内容,然后返回您需要的任何内容,并将其包含在list_display
中 . 我不认为这适用于list_filter
.那么,让我们回到你的
ModelOne
课:然后,在您的ModelOneAdmin中:
我要注意,为了记录,当你这样做时,你需要为每个正在显示的ModelOne实例命中数据库 . 因此,如果您're listing 50 instances, you'重新产生50个单独查询的开销(每次调用一个
self.modeltwo_set.all()
) . 那不是 - 它可能是正确的答案,取决于你的情况 . 请注意,这可能是一项非常昂贵的操作 .您应该使用字段的相关名称或
RelatedModel._meta.get_fields