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