Объект 'Пользователь' не повторяется ошибка django при использовании manytomanyfield - PullRequest
0 голосов
/ 06 августа 2020

Я создал модель команды, содержащую множество полей для членов. Теперь, пытаясь показать имена команд, в которых присутствует пользователь, я получаю ошибку TypeError at /dashboard/ 'User' object is not iterable. Коды приведены ниже:

models.py

class Team(models.Model):
    name = models.CharField(max_length=64, unique=True)
    description = models.CharField(max_length=1024)
    created_at = models.DateTimeField(auto_now_add=True)
    members = models.ManyToManyField(User, through='Member')

    def __str__(self):
        return f"Team: {self.name} created on {self.created_at}\nMember(s): {self.members.all()}"


class Member(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    team = models.ForeignKey(Team, on_delete=models.CASCADE, blank=True)

    def __str__(self):
        return f"User: {self.user} belongs to {self.team}"

views.py

@login_required(login_url="/login/")
def dashboard(request):
    teams = Member.objects.filter(user__in=request.user)
    context = {}
    context = {"teams": teams
    return render(request, "users/dashboard.html", context)

панель управления. html

<p>Your teams:</p>
<ul>
    {% for team in teams %}
        <li>{{ team.name }}</li>
    {% endfor %}
</ul>
{% endblock %}

Может кто-нибудь, пожалуйста, помогите мне исправить ошибку и понять, что ее вызывает?

1 Ответ

1 голос
/ 07 августа 2020

Вы можете попробовать это

@login_required(login_url="/login/")
def dashboard(request):
    teams = Member.objects.filter(user__in=[request.user])
    context = {}
    context = {"teams": teams
    return render(request, "users/dashboard.html", context)

Вы хотите проверить, существует ли пользователь в списке, а не сам экземпляр пользователя. Кроме того, я бы, вероятно, использовал id вместо всего пользовательского объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...