从createview的表单中获取值

问题描述 投票:0回答:1

我使用CreateView创建新用户,但是我想同时更新另一个模型。 (将用户添加到俱乐部)

我的表单:

class SignUpFormInvitation(UserCreationForm):
    club = forms.CharField(label="Club")
    club_pk = forms.CharField(widget=forms.HiddenInput)
    username = forms.CharField(max_length=30, required=True, label="Pseudo")
    first_name = forms.CharField(max_length=30, required=True, label="Prénom")
    last_name = forms.CharField(max_length=30, required=True, label='Nom')
    email = forms.EmailField(max_length=254, label='E-mail')
    password1 = forms.CharField(widget=forms.PasswordInput, label="Mot de passe")
    password2 = forms.CharField(widget=forms.PasswordInput, label="Mot de passe confirmation")

    class Meta:
        model = User
        fields = [
            'club',
            'username',
            'first_name',
            'last_name',
            'email',
            'password1',
            'password2',
            ]    

    def __init__(self, *args, **kwargs):
        super(SignUpFormInvitation, self).__init__(*args, **kwargs)
        self.fields['club'].widget.attrs['readonly'] = True

将野外俱乐部和club_pk已正确添加到表格中。

我的观点:

class SignUpViewInvitation(generic.CreateView):
    """
    display the register form for a sportif
    """
    form_class = SignUpFormInvitation
    success_url = reverse_lazy('user-connexion')
    template_name = 'utilisateurs/signup.html'

    def get_initial(self):
        club = get_object_or_404(Club, token=self.kwargs.get('token'))
        return {
            'club':club,
            'club_pk':club.pk,
        }

    def form_valid(self, form):
        club = Club.objects.get(pk=form.instance.club_pk)
        club.clubs_members.add(self.request.user)
        return super().form_valid(form)

我尝试使用form_valid更新俱乐部模型,但返回此错误:此行的'User' object has no attribute 'club_pk' club = Club.objects.get(pk=form.instance.club_pk)

python django
1个回答
0
投票

在您的Meta类中,您尚未在字段列表中添加club_pk。将其添加到字段列表中以供以后访问。但是,我不明白为什么要使用两列club和club_pk。我认为一个就足够了

© www.soinside.com 2019 - 2024. All rights reserved.