型号:
class Specialization(models.Model):
SPECIALIZATION_TYPE = (
('S','Specialty'),
('Ss','Sub-specialty')
)
specialization_desc = models.CharField('Specialization',max_length=50,unique=True)
specialization_type = models.CharField(max_length=2, choices=SPECIALIZATION_TYPE)
active = models.BooleanField('Active',default=True)
def __unicode__(self):
return self.specialization_desc
class Person(models.Model):
GENDER = (
('M','Male'),
('F','Female'),
)
first_name = models.CharField("First Name", max_length=50)
last_name = models.CharField("Last Name",max_length=50)
middle_name = models.CharField("Middle Name", max_length=50, blank=True)
specialization_id = models.ManyToManyField(Specialization,
模板:
{% for per in person_list%}
<tr>
<td>{{ per }}</td>
{% for spec in per.specialization_id.all %}
<td>{{ spec }}</td>
{% endfor %}
</tr>
{% endfor %}
查看:
p = Person.objects.all()
return p
我希望看到这样一张桌子:
FullName | Specialization |
My Name | Programming, Web Development |
我得到了这个
FullName | Specialization |
My Name | Programming | Web Development
对我来说似乎死路一条。想法?
答案 0 :(得分:1)
我不明白你的问题。
您是否在模板中获得专业化并且只需要以不同方式显示它们?
{% for person in person_list%}
<tr>
<td>{{ person }}</td>
<td>{{ person.specialization_id.all|join:", " }}</td>
</tr>
{% endfor %}
此外,不要使用_id
后缀外键和多对多关系。
对于外键Django已经为你做了,所以在DB中你最终会得到field_id_id
。
对于多对多表,会创建一个单独的表,并且不会在数据库中的任何位置创建specialization_id
。请使用更详细的名称,例如specializations
。