Как я могу использовать свою промежуточную таблицу для отображения отношения m2m в моих шаблонах? - PullRequest
1 голос
/ 14 февраля 2020

Я хочу иметь возможность видеть, какие игроки входят в команду из моего подробного описания команды. html файл. Команда выбрана в моем списке команд. 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 %}

Я не использую свой собственный набор запросов, я ' m используя

class TeamDetailView(generic.DetailView):
    model = Team

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Я все еще не могу решить это. Есть ли простая вещь в одну строку, или мне нужно будет редактировать несколько файлов? Это становится серьезным камнем преткновения, и я очень ценю любую информацию, которая у вас есть.

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Я нашел решение. Это было намного проще, чем я себе представлял.

Вы просто делаете


{% 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 %}
0 голосов
/ 25 февраля 2020

Вы можете сделать это с помощью отношения ManyToMany в Django без создания модели команды:

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

Если вам нужна модель команды, ваш код правильно, вы должны увидеть ошибку в runserver.

...