pir*_*irr 2 python django many-to-many foreign-key-relationship django-tables2
通过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')
Run Code Online (Sandbox Code Playgroud)
来自模型C的django-tables2:
class CTable(tables.Table):
class Meta:
model = C
Run Code Online (Sandbox Code Playgroud)
观点:
def C(request):
data = C.objects.all()
c_table = t.CTable(data)
return render(request, 'c.html', {'c_table': c_table})
Run Code Online (Sandbox Code Playgroud)
并在c.html中:
...
{% render_table c_table %}
...
Run Code Online (Sandbox Code Playgroud)
我得到的表只有两列(id,name)而不是四列(id,name,b.name,baname).如何从多个到多个缺少列?对不起我糟糕的英语.
在模型中添加属性方法并使用表类呈现它,即:
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()])
Run Code Online (Sandbox Code Playgroud)
class CTable(tables.Table):
class Meta:
model = C
fields = ('a', 'b', 'all_bs')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1436 次 |
| 最近记录: |