【问题标题】:Extract and save data from another model从另一个模型中提取和保存数据
【发布时间】:2017-09-17 14:55:54
【问题描述】:

在我的应用中,用户创建一个项目,然后创建一个团队并通过向团队成员发送邮件来邀请他们注册该应用。 我试图弄清楚如何将受邀用户添加到之前创建的团队中。 我尝试使用: TeamMember.user = user 但显然它不起作用;) 你能帮我让它工作吗?

注册/views.py:

def TeamRegister(request):
    if request.method == 'POST':
        form = TeamMembersForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            password = MyUser.objects.make_random_password()
            user.set_password(password)
            user.is_active = False
            user.is_employee = True
            TeamMember.user = user
            user.save()
            u1 = user.id
            a1 = MyUser.objects.get(email = request.user.email)
            a2 = Project.objects.filter(project_hr_admin = a1)
            a3 = a2.latest('id')
            a4 = a3.team_id
            a4.members.add(u1)
            current_site = get_current_site(request)
            message = render_to_string('acc_active_email.html', {
                'user':user,
                'domain':current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'token': account_activation_token.make_token(user),
            })
            mail_subject = 'You have been invited to SoftScores.com please sign in to get access to the app'
            to_email = form.cleaned_data.get('email')
            email = EmailMessage(mail_subject, message, to=[to_email])
            email.send()
            return HttpResponse('An email have been sent to your user asking him to sign in')

    else:
        form = TeamMembersForm()

    return render(request, 'team_register.html', {'form': form})

app/models.py

class Team(models.Model):
    team_name = models.CharField(max_length=100, default = '')
    team_hr_admin = models.ForeignKey(MyUser, blank=True, null=True)
    members = models.ManyToManyField(MyUser, related_name="members")


    def __str__(self):
        return self.team_name


class Project(models.Model):
    name = models.CharField(max_length=250)
    team_id = models.ForeignKey(Team, blank=True, null=True)
    project_hr_admin = models.ForeignKey(MyUser, blank=True, null=True)

    def get_absolute_url(self):
        return reverse('website:ProjectDetails', kwargs = {'pk' : self.pk})

    def __str__(self):
        return self.name

【问题讨论】:

    标签: django django-models django-authentication


    【解决方案1】:

    您还需要以某种方式识别团队。如果您在视图中有团队,那么您可以像这样创建TeamMember 对象:

    # Just one suggestion of how this could be done, but this shouldn't work out of the box
    TeamMember.objects.create(user_id=user.id,
                              team_id=Team.objects.get(id=form.cleaned_data['team_id'])) 
    

    至于您的模型,查阅 Django 文档以了解 Django 中的 M2M 关系:https://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/

    创建一个ManyToManyField 并将TeamMember 用作through 模型或完全删除它,因为Django 也会自动生成它。

    【讨论】:

    • 那么你会建议删除团队成员模型并为团队成员团队添加一个属性吗?
    • 因为文档说对多对多关系使用中间模型,可能会导致一些相关管理器的方法被禁用,所以其中一些示例不适用于此类模型.
    • @Ben2pop 如果您不打算将任何字段添加到TeamMember 模型,那么我建议您删除它,是的。
    • 好的,我开始弄清楚并理解一切,问题是我的工作流程是,用户创建一个带有名称的团队,然后使用仅要求发送电子邮件的表单邀请成员并创建用户(带有 ID 和邮件)如何引用刚刚创建的团队?
    • @Ben2pop 好吧,您必须将团队数据存储在某个地方,直到您开始邀请成员。一种简单的方法是让用户选择他/她想邀请人们加入的团队。
    猜你喜欢
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多