Djangotables 2 M2M字段未显示

2024-05-14 22:15:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

使用:foreigncolumn=表.列(访问器='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']

你知道我做错什么了吗?在


Tags: todjangonametruetablesmodelslengthmax
1条回答
网友
1楼 · 发布于 2024-05-14 22:15:29

这对于ManyToManyFields并不容易,因为Accessor的工作方式很简单。您可以通过'lipids.all'显示相关的repr,但这在这里似乎还不够。但是,您可以将属性(或方法)添加到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_related('lipids')中添加一个OrganismQuerySet,以获得更好的性能。在

相关问题 更多 >

    热门问题