【问题标题】:How do I use my intermediate table to show the m2m relationship in my templates?如何使用中间表在模板中显示 m2m 关系?
【发布时间】:2020-02-14 09:41:11
【问题描述】:

我希望能够从我的 team-detail.html 文件中查看球队中有哪些球员。团队是在我的 team-list.html 中选择的。

这些是我的相关模型:

class Player(models.Model):
    name = models.CharField(db_column="Player's_Name", blank=True, null=True, max_length=32)
    team = models.CharField(db_column="Player's_Team", blank=True, null=True, max_length=32)
    username = models.CharField(db_column='Username', blank=True, null=True, max_length=32)
    password = models.CharField(db_column='Password', blank=True, null=True, max_length=16)
    email = models.EmailField(db_column='Email', blank=True, null=True)
    bio = models.CharField(db_column='Bio', blank=True, null=True, max_length=5000)
    # teamid = models.CharField(db_column='TeamID', blank=True, null=True, max_length=8)
    teams = models.ManyToManyField('Team', through='Membership')

    def get_absolute_url(self):
        return reverse('player-detail', args=[str(self.id)])


class Team(models.Model):
    team_name = models.CharField(db_column='Team_Name', blank=True, null=True, max_length=32)
    playernames = models.TextField(db_column='Players', blank=True, null=True)

    def get_absolute_url(self):
        return reverse('team-detail', args=[str(self.id)])


class Membership(models.Model):
    player = models.ForeignKey(Player, on_delete=models.CASCADE)
    team = models.ForeignKey(Team, on_delete=models.CASCADE)
    date_joined = models.DateField(auto_now_add=False, blank=True, null=True)

    def get_absolute_url(self):
        return reverse('membership-detail', args=[str(self.id)])

这是我的团队详细信息文件:

{% extends "base_generic.html" %}

{% block content %}
  <h1>Team Name: {{ team.team_name }}</h1>

  <p><strong>Players:</strong> <a href="{% url 'player-detail' team.membership_set. %}">{{ team.membership_set.all }}</a></p>

{% endblock %}

我没有使用我自己的查询集,我正在使用

class TeamDetailView(generic.DetailView):
    model = Team

如果您需要更多信息,请告诉我。

我仍然无法解决这个问题。是否有简单的单行操作,或者我需要跨多个文件进行编辑?它正在成为一个巨大的绊脚石,我非常感谢您提供的任何信息。

【问题讨论】:

    标签: django django-models django-templates many-to-many


    【解决方案1】:

    您可以在 Django 中使用 ManyToMany 关系来创建模型团队:

    https://docs.djangoproject.com/en/3.0/topics/db/examples/many_to_many/

    如果您需要模型 Team 您的代码是正确的,您必须在 runserver 中看到错误。

    【讨论】:

      【解决方案2】:

      我找到了解决方案。这比我想象的要简单得多。

      你只需这样做

      
      {% block content %}
        <h1>Team Name: {{ team.team_name }}</h1>
      
          <p><strong>Players:</strong></p>
        {% for player in team.membership_set.all %}
            <li><a href="{% url 'player-detail' player.player_id %}">{{ player.player.name }}</a> AKA {{ player.player.account.username }} Joined: {{ player.date_joined }}</li>
        {% endfor %}
      
      
      {% endblock %}
      

      【讨论】:

        猜你喜欢
        • 2015-05-24
        • 2011-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-29
        • 2012-07-13
        • 2022-01-23
        • 1970-01-01
        相关资源
        最近更新 更多