如何在Django Admin中显示多对多模型中的所有字段

yzxexxkh  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(151)

我有以下模型:

class ModelA(models.Model):
    some_field_A = models.CharField()
    some_other_field_A = models.CharField()
    
class ModelB(models.Model):
    some_field_B = models.CharField()
    many_to_many_relation = models.ManyToManyField(ModelA)

字符串
admin.py中,我使用filter_horizontal来编辑ManyToManyField:

class ModelB(admin.ModelAdmin):
    model = ModelB
    filter_horizontal = ('many_to_many_relation',)


但它只显示some_field_A,我希望它显示ModelA中的两个字段,因为ModelA中的条目是唯一的,取决于这两个字段,正如您从图片中看到的那样,有多个条目具有相同的值(即some_field_A = EUV),但它们对于some_other_field_A具有不同的值:


的数据

nfs0ujit

nfs0ujit1#

它显示您在ModelA中定义的__str__(…)方法的结果,因此如果您在__str__(…)方法中返回some_field的值,则它将仅返回some_field的数据。
因此,您可以更改此方法并返回两个字段:

class ModelA(models.Model):
    some_field_A = models.CharField()
    some_other_field_A = models.CharField()

    def __str__(self):
        return f'{self.some_field_A} {self.some_other_field_A}'

字符串

cyvaqqii

cyvaqqii2#

我不确定这是否正是您正在寻找的解决方案,但您可以重写ModelA__str__方法,以在一行中返回信息。
例如:

class ModelA(models.Model):
  first_field = models.CharField(max_length=16)
  second_field = models.CharField(max_length=16)

  def __str__(self):
      return f"{self.first_field} ({self.second_field'})"

字符串
管理视图应该将每个对象显示为“foo(bar)”

相关问题