【问题标题】:Get value from form in createview从 createview 中的表单获取价值
【发布时间】:2020-06-15 06:52:12
【问题描述】:

我使用 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

field club 和 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】:

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

    【讨论】:

      【解决方案2】:

      我用 club 和 club_pk 都试过了,只用了 club。 结果是一样的。如果我删除所有出现的 club__pk ,我会收到此错误: User' object has no attribute 'club'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-20
        • 1970-01-01
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        • 2017-11-22
        相关资源
        最近更新 更多