gpt4 book ai didi

python - django-tables2 中的多对多

转载 作者:行者123 更新时间:2023-11-28 21:15:16 25 4
gpt4 key购买 nike

我通过 ForeignKey 拥有多对多的 django 模型:

    class A(m.Model):
id = m.AutoField(primary_key=True)
name = m.CharField(max_length=250, unique=True, null=False)

def __str__(self):
return self.name


class B(m.Model):
id = m.AutoField(primary_key=True)
name = m.CharField(max_length=250, unique=True, null=False)
a = m.ForeignKey(A)

def __str__(self):
return self.name


class C(m.Model):
id = m.IntegerField(null=False, unique=True, primary_key=True)
name = m.CharField(max_length=250, unique=True, null=False)
bs = m.ManyToManyField(B, through='D')

def __str__(self):
return '%d, %s, (%s), (%s)' % (
self.id,
self.name,
', '.join(b.name for b in self.bs.all()),
', '.join(b.a.name for b in self.bs.all()))
)


class D(m.Model):
c = m.ForeignKey(C)
b = m.ForeignKey(B)

class Meta:
unique_together = ('c', 'b')

来自模型 C 的 django-tables2:

class CTable(tables.Table):

class Meta:
model = C

观看次数:

def C(request):
data = C.objects.all()
c_table = t.CTable(data)
return render(request, 'c.html', {'c_table': c_table})

在 c.html 中:

...
{% render_table c_table %}
...

我得到的表格只有两列 (id, name) 而不是四列 (id, name, b.name, b.a.name)。如何从多对多中获取缺失的列?对不起我糟糕的英语。

最佳答案

在模型中添加一个属性方法并使用表类渲染它,即:

模型类

class C(m.Model):
id = m.IntegerField(null=False, unique=True, primary_key=True)
name = m.CharField(max_length=250, unique=True, null=False)
bs = m.ManyToManyField(B, through='D')

def __str__(self):
return '%d, %s, (%s), (%s)' % (
self.id,
self.name,
', '.join(b.name for b in self.bs.all()),
', '.join(b.a.name for b in self.bs.all()))
)

@property
def all_bs(self):
return ', '.join([x.name for x in self.bs.all()])

表类

class CTable(tables.Table):

class Meta:
model = C
fields = ('a', 'b', 'all_bs')

关于python - django-tables2 中的多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30498018/

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