gpt4 book ai didi

python - django-tables 2 M2M 字段未显示

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:28 24 4
gpt4 key购买 nike

我试图在 django-table2 中显示 M2M 字段,如 Django-tables2: How to use accessor to bring in foreign columns? 中所示。和Accessing related models with django-tables2

使用:foreigncolumn =tables.Column(accessor='foreignmodel.foreigncolumnname'),我只看到一个'--'...

# The models:

class Organism(models.Model):
species_name = models.CharField(max_length=200)
strain_name = models.CharField(max_length=200)
eukaryotic = models.BooleanField(default=True)
lipids = models.ManyToManyField('Lipid',blank=True)

class Lipid(models.Model):
lm_id = models.CharField(max_length=100)
common_name = models.CharField(max_length=100,blank=True)
category = models.CharField(max_length=100,blank=True)

#The tables

class OrganismTable(tables.Table):
name = tables.LinkColumn('catalog:organism-detail', text=lambda record: record.species_name, args=[A('pk')])
lp = tables.Column(accessor='Lipid.common_name')
class Meta:
model = Organism
sequence = ['name','lp']
exclude = ['id','species_name']

知道我做错了什么吗?

最佳答案

这对于ManyToManyFields来说不太容易,因为Accessor的工作方式很简单。您可以通过 'lipids.all' 显示相关 QuerySetrepr,但这在这里似乎还不够。但是,您可以向 Organism 模型添加属性(或方法)并在访问器中使用它。这样,您就可以显示与实例相关的任何自定义信息:

class Organism(models.Model):
# ...
@property
def lipid_names(self):
return ', '.join(l.common_name for l in self.lipids.all()) # or similar

class OrganismTable(tables.Table):
# ...
lp = tables.Column(accessor='lipid_names')

我建议将 prefetch_lated('lipids') 添加到您传递给表的 Organism QuerySet 以获得更好的性能.

关于python - django-tables 2 M2M 字段未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42343970/

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