Django UpdateView 不使用 ModelForm 保存新用户还是现有用户

哈立德

我正在UpdateAccountViewUser模型编写 UpdateView ,通过ModelForm进行更新,该 ModelFormMyUserCreationForm已经是用于创建新用户的 ModelForm。问题是,每当我单击提交以保存模板中的更改时,它都会重新呈现模板。

例如,如果我没有更改任何字段,它会给我一个“用户名已被占用”的错误,我会在MyUserCreationForm检查唯一的用户名时向您展示,或者只是为字段上的新条目重新呈现模板,实际上没有保存对模型的任何更改。

这是我的 MyUserCreationForm

class MyUserCreationForm(UserCreationForm):

    class Meta:
        model = User #extended from auth.models.User
        fields = ("first_name", "last_name", "username", "email", "gender", "profile_photo")

    # adding bootstrap styling to the ModelForm fields
    def __init__(self, *args, **kwargs):
        super(MyUserCreationForm, self).__init__(*args, **kwargs)
        for field in iter(self.fields):
            self.fields[field].widget.attrs.update({
                'class': 'form-control input-lg',
                'placeholder': field.replace("_", " ").title(),
                'tabindex': list(self.fields).index(field) + 1})
            self.fields[field].widget.attrs.pop('autofocus', None)

            if field == 'username' or field == 'email':
                self.fields[field].widget.attrs.update({
                    'placeholder': field.replace("_", " ").title() + ' *',
                })


    def clean_username(self):

        username = self.cleaned_data['username']
        if not re.search(r'^[\w.-]+$', username):
             raise forms.ValidationError('Username can only contain alphanumeric characters, dots, hyphens ,and underscores')
        try:
             User.objects.get(username=username)
        except ObjectDoesNotExist:
             return username
        raise forms.ValidationError('Username is already taken.')

这是视图类 UpdateAccountView

class UpdateAccountView(UpdateView):
    form_class = MyUserCreationForm
    model = User
    template_name = 'auth/account-edit.html'
    success_url = '/'

    def get_object(self, queryset=None):
        return self.request.user

但是,如果我通过使用模型和 中的字段直接更新模型UpdateView,它工作正常。但是我需要通过ModelForm来控制渲染时的样式。

所以我知道问题出在内部,ModelForm但即使搜索了很多,我也找不到它。

先感谢您。

阿拉斯代尔

您可以尝试将设置字段样式的代码移动到单独的 mixin 中:

class UserStyleMixin(object):
    def __init__(self, *args, **kwargs):
        super(UserStyleMixin, self).__init__(*args, **kwargs)
        # Style the fields here

然后你可以MyUserCreationForm使用mixin,并为更新视图创建一个新表单。

class MyUserCreationForm(UserStyleMixin, UserCreationForm):
    ...

class UserUpdateForm(UserStyleMixin, forms.ModelForm):
    ...

请注意,如果更新视图允许用户更改用户名,那么您仍应检查用户名是否被允许且唯一。如果您unique=True的模型中有用户名,Django 应该为您处理这个问题。将用户名正则表达式也移到模型中也是个好主意。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当不使用ModelForm时,Django表单如何知道将数据保存在哪里?

来自分类Dev

在Django中使用Foreignkey的UpdateView

来自分类Dev

Django:无法使用新用户登录

来自分类Dev

Django,保存ModelForm

来自分类Dev

Django ModelForm不保存

来自分类Dev

Django ModelForm无法保存

来自分类Dev

Python社交身份验证。用户登录创建新用户,而不是使用现有用户

来自分类Dev

Django将用户传递给ModelForm以在ModelChoiceField查询中使用

来自分类Dev

Django如何在单个modelForm中排除字段,仅用于updateview而不是createview?

来自分类Dev

Django - UpdateView ModelForm 在查询集字段上设置初始值

来自分类Dev

使用ModelForm Django保存ManytoManyField时出现问题

来自分类Dev

Django ModelForm不保存数据

来自分类Dev

Django ModelForm不保存数据

来自分类Dev

使用Django modelForm验证带有额外参数的POST数据

来自分类Dev

网址中没有pk的Django UpdateView

来自分类Dev

网址中没有pk的Django UpdateView

来自分类Dev

网址中没有pk的Django UpdateView

来自分类Dev

Django:具有OneToOneField的ModelForm

来自分类Dev

Django:使用具有ManyToMany关系的字段创建新用户

来自分类Dev

如何在Django中使用带有JsonResponse的AJAX创建新用户?

来自分类Dev

如何在Django ModelForm中设置基于用户的表单字段选择(使用django-allauth)

来自分类Dev

如何在Django ModelForm中设置基于用户的表单字段选择(使用django-allauth)

来自分类Dev

如何判断我是使用模板的django通用视图(CreateView还是UpdateView)进行创建或更新?

来自分类Dev

如何判断我是使用模板的django通用视图(CreateView还是UpdateView)进行创建或更新?

来自分类Dev

有没有办法不创建新用户,只允许现有用户使用 firebase_auth 登录,谷歌登录?

来自分类Dev

Django 1.6使用现有用户编辑用户配置文件模型

来自分类Dev

Django使用Widget覆盖ModelForm属性

来自分类Dev

Django:如何使用ModelForm和通用视图

来自分类Dev

在Django中使用ModelForm创建UpdateForm

Related 相关文章

  1. 1

    当不使用ModelForm时,Django表单如何知道将数据保存在哪里?

  2. 2

    在Django中使用Foreignkey的UpdateView

  3. 3

    Django:无法使用新用户登录

  4. 4

    Django,保存ModelForm

  5. 5

    Django ModelForm不保存

  6. 6

    Django ModelForm无法保存

  7. 7

    Python社交身份验证。用户登录创建新用户,而不是使用现有用户

  8. 8

    Django将用户传递给ModelForm以在ModelChoiceField查询中使用

  9. 9

    Django如何在单个modelForm中排除字段,仅用于updateview而不是createview?

  10. 10

    Django - UpdateView ModelForm 在查询集字段上设置初始值

  11. 11

    使用ModelForm Django保存ManytoManyField时出现问题

  12. 12

    Django ModelForm不保存数据

  13. 13

    Django ModelForm不保存数据

  14. 14

    使用Django modelForm验证带有额外参数的POST数据

  15. 15

    网址中没有pk的Django UpdateView

  16. 16

    网址中没有pk的Django UpdateView

  17. 17

    网址中没有pk的Django UpdateView

  18. 18

    Django:具有OneToOneField的ModelForm

  19. 19

    Django:使用具有ManyToMany关系的字段创建新用户

  20. 20

    如何在Django中使用带有JsonResponse的AJAX创建新用户?

  21. 21

    如何在Django ModelForm中设置基于用户的表单字段选择(使用django-allauth)

  22. 22

    如何在Django ModelForm中设置基于用户的表单字段选择(使用django-allauth)

  23. 23

    如何判断我是使用模板的django通用视图(CreateView还是UpdateView)进行创建或更新?

  24. 24

    如何判断我是使用模板的django通用视图(CreateView还是UpdateView)进行创建或更新?

  25. 25

    有没有办法不创建新用户,只允许现有用户使用 firebase_auth 登录,谷歌登录?

  26. 26

    Django 1.6使用现有用户编辑用户配置文件模型

  27. 27

    Django使用Widget覆盖ModelForm属性

  28. 28

    Django:如何使用ModelForm和通用视图

  29. 29

    在Django中使用ModelForm创建UpdateForm

热门标签

归档