修改DjangoInvestments包以允许团队功能

2024-06-16 12:10:28 发布

您现在位置:Python中文网/ 问答频道 /正文

使用django邀请,用户可以使用下面的代码(我从这个问题中获得的代码)一次邀请多封电子邮件到他们的团队:How to associate invited users with the inviter's Company/group?

@login_required
def invite_multi_premium(request):

    # Get users that are in the company's user database as well as users that have been invited
    taskly_users = TasklyUser.objects.filter(team=request.user.team)
    Invitations = get_invitation_model()
    # I'm afraid this is going to get all invited users, not just those that belong to the company
    invited_users = Invitations.objects.filter()

    if request.method == 'POST':
        form = InviteMultipleEmailsForm(request.POST)
        print(request.POST, "THIS IS THE REQUEST POST")
        invitees2 = request.POST['emails']
        invitees = invitees2.split(', ')
        for invitee in invitees:
            Invitation = get_invitation_model()
            try:
                invite = Invitation.create(invitee, inviter=request.user, team=str(request.user.team))
                invite.send_invitation(request)
            except IntegrityError as e:
                print(type(e))
                print(dir(e))
                return render(request, 'invitations/forms/_invite_multi.html', {
                    "form":form
                    })

    else:
        form = InviteMultipleEmailsForm()
    return render(request, 'invitations/forms/_invite_multi.html', {
        "form":form
    })

当用户点击邀请链接时,他们将被带到一个注册表单(django allauth),并预先填写他们的电子邮件地址。当他们注册时,他们与邀请者所在的团队没有关联。这是我修改的包的一部分,以将“团队”添加到邀请模型中,但我无法将“团队”从邀请模型传递到用户模型

class Invitation(AbstractBaseInvitation):
    email = models.EmailField(unique=True, verbose_name=_('e-mail address'),
                              max_length=app_settings.EMAIL_MAX_LENGTH)
    created = models.DateTimeField(verbose_name=_('created'),
                                   default=timezone.now)

    team = models.CharField(max_length=255, null=True, blank=True)

    @classmethod
    def create(cls, email, inviter=None, team=None, **kwargs):
        key = get_random_string(64).lower()
        instance = cls._default_manager.create(
            email=email,
            key=key,
            inviter=inviter,
            team=team,
            **kwargs)
        return instance

    def key_expired(self):
        expiration_date = (
            self.sent + datetime.timedelta(
                days=app_settings.INVITATION_EXPIRY))
        return expiration_date <= timezone.now()

    def send_invitation(self, request, **kwargs):
        current_site = kwargs.pop('site', Site.objects.get_current())
        invite_url = reverse('invitations:accept-invite',
                             args=[self.key])
        invite_url = request.build_absolute_uri(invite_url)
        ctx = kwargs
        ctx.update({
            'invite_url': invite_url,
            'site_name': current_site.name,
            'email': self.email,
            'team': self.team,
            'key': self.key,
            'inviter': self.inviter,
        })

        email_template = 'invitations/email/email_invite'

        get_invitations_adapter().send_mail(
            email_template,
            self.email,
            ctx)
        self.sent = timezone.now()
        self.save()

        signals.invite_url_sent.send(
            sender=self.__class__,
            instance=self,
            invite_url_sent=invite_url,
            inviter=self.inviter)

    def __str__(self):
        return "Invite: {0}".format(self.email)

Tags: keyselfformurlgetreturnemailrequest
1条回答
网友
1楼 · 发布于 2024-06-16 12:10:28

通过将接收信号移动到我的app/models.py而不是app/signals.py中解决了此问题。我在这篇文章中读到:https://simpleisbetterthancomplex.com/tutorial/2016/07/28/how-to-create-django-signals.html您应该避免将接收器放在models.py文件中,但缺少详细的解释

相关问题 更多 >