返回多对多关系的额外字段,而不是另一个

时间:2017-10-23 20:45:46

标签: python django function view django-managers

我的问题基于Django文档中给出的this示例。我的models.py看起来像这样:

class Wrestler(models.Model):

    name = CharField(max_length=255)

class AlterEgo(models.Model):

    name = CharField(max_length=255)
    person = ForeignKey('someapp.Person', )

class Group(models.Model):

    name = CharField(max_length=255)
    members = models.ManyToManyField('someapp.Person', through='Membership')

class Membership(models.Model):

    person= models.ForeignKey('someapp.Person',)
    alter_ego = models.ForeignKey('someapp.AlterEgo', blank=True, null=True)
    group = models.ForeignKey('someap.Group',)

我的群组列表模板如下所示:

    {% for object in object_list %}<tbody>
    <tr>
        <td><a href="{{object.get_absolute_url}}">{{ object.name }}</a></td>
        <td>{{ object.members.all|join:" & " }}</td>
    </tr>
</tbody>{% endfor %}

如您所见,我的额外字段是“alter_ego”字段。每个人都可以拥有另一个自我,e。 G。克里斯杰里科曾经作为Moongoose McQueen表演。使用此模板,成员将被列为“Chris Jericho&amp; Richard Ward&amp; ...”。我的问题是我不希望耶利哥被列为耶利哥,但如果给予另一个自我,那就像麦奎因一样。

我想我应该有一个自定义功能取代我的人FK,如果给出另一个自我,但我仍然试图绕过它,因为我对这一切真的是一个菜鸟。

如果有人能指出我正确的方向,我会非常感激。提前致谢。

1 个答案:

答案 0 :(得分:0)

  1. 从会员资格中删除alter_ego。

  2. 更改AlterEgo类并添加related_name:

    类AlterEgo(models.Model):

        name = CharField(max_length=255)
        person = ForeignKey('someapp.Person', related_name = 'alter_ego')
        group = ForeignKey('someapp.Group', blank=True, null=True)
    
  3. 在模板中迭代成员:

     <td>
         {% for member in group.members.all %}
            {% if member.alter_ego.group == group }}
                {{ member.alter_ego}}
            {% else %}
                {{ member.name }}
            {% endif %}   
         {% endfor %}
     </td>
    
  4. P.S。您的小任务是从模板中的名称形成字符串,并与&amp;

    分开