【问题标题】:How to add request.user to manytomanyfield for team members in django?如何将 request.user 添加到 django 中的团队成员的 manytomanyfield?
【发布时间】:2020-11-26 23:56:28
【问题描述】:

我试图为团队成员创建一个自定义团队模型,该模型具有一个 manytomanyfield,现在我有一个允许用户创建自己的团队的表单,但我不明白如何将 request.user 添加到成员的团队。以下是代码:

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}"


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

forms.py

class TeamRegistrationForm(ModelForm):
    class Meta:
        model = Team
        fields = ["name", "description"]

views.py

@login_required(login_url="/login/")
def teamregister(request):
    if request.method == "POST":
        form = TeamRegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            form.instance.members.add(request.user) # doesn't work :[
            print(form.save())
            messages.success(request, "Your team has been successfully registered!")
            return redirect("dashboard")
    else:
        form = TeamRegistrationForm()

    return render(request, "users/team.html", {"form": form})

我尝试使用form.instance.members.add(request.user) 将已登录用户添加到团队成员中,但没有成功。请帮忙:[

【问题讨论】:

  • 什么不起作用?它会引发什么错误?
  • 在 django shell 中,当我打印我们的查询集时,它打印出创建的团队中没有成员 <QuerySet [<Team: Team: volt's squad created on 2020-08-06 14:58:53.398269+00:00 Member(s): auth.User.None>]> 而我想要的是当前登录的用户应该出现在成员中

标签: python django database


【解决方案1】:

添加到关系中,但您不打印关系中的项目。你打印经理。确实,你写{self.members},那是经理,你应该把它改写成{self.manager<b>.all()</b>}Manager 将,除非你实现它否则返回<i>ModelName</i>.None

class Team(models.Model):
    # …

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

【讨论】:

  • 天哪,非常感谢,你刚刚救了我。非常感谢你编辑:你能告诉我如何在用户个人资料页面上显示团队名称吗?我试过{% for team in user.member.team %} {{ team.name }} {% endfor %} @WillemVanOnsem
  • {% for team in user.member.all %} {{ team.name }}{ endfor %}.
  • 它现在显示错误*MultipleObjectsReturned at /dashboard/* get() returned more than one Member -- it returned 2!@WillemVanOnsem
  • @Volt:这意味着你在某处使用了.get,而不是.filter。您应该检查回溯...
  • 我会尽力找出错误,并用解决方案编辑此评论。谢谢你帮助我
猜你喜欢
  • 2020-09-06
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
相关资源
最近更新 更多