gpt4 book ai didi

django - 在list_display django中显示子类的信息

转载 作者:行者123 更新时间:2023-12-02 06:30:50 26 4
gpt4 key购买 nike

我在 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_oneclass 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 = 0class ModelOneAdmin(admin.ModelAdmin):    list_display = ('field_one', 'field_two', 'field_three',)    inlines = [ModelTwoInline]

我的问题是:我可以在ModelOne的list_display中显示ModelTwo的字段吗? (list_filter 和 search_fields 相同)

我需要这个,因为我有很多与主类相关的子类!

最佳答案

您可以通过使用 @property 装饰器编写实例方法来在 list_display 中显示您想要的任何内容,然后该方法返回您需要的任何内容,并将其包含在 中列表显示。但我认为这不适用于 list_filter

那么,让我们回到您的 ModelOne 类:

class ModelOne(models.Model):
[...]

def __unicode__(self):
return self.field_one

@property
def model_two_other_field(self):
return ', '.join([m2.other_field for m2 in self.modeltwo_set.all()])

然后,在您的 ModelOneAdmin 中:

class ModelOneAdmin(admin.ModelAdmin):
list_display = ('field_one', 'field_two', 'field_three', 'model_two_other_field')
[...]

我想郑重声明一下,当您执行此操作时,您将需要对显示的每个 ModelOne 实例进行数据库命中。因此,如果您列出 50 个实例,则会产生 50 个单独查询的开销(每次调用 self.modeltwo_set.all() 一个查询)。这并不一定意味着您不应该这样做——这可能是正确的答案,具体取决于您的情况。请注意,这可能是一项相当昂贵的操作。

关于django - 在list_display django中显示子类的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6022456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com