Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django表单初始值在保存后更改_Django_Python 3.x_Django Forms - Fatal编程技术网

Django表单初始值在保存后更改

Django表单初始值在保存后更改,django,python-3.x,django-forms,Django,Python 3.x,Django Forms,我使用从django的UserCreationForm继承的自定义表单来添加用户。无论如何,我必须为用户名字段设置不同的初始值。它工作得很好,但在点击保存按钮后,用户将使用与表单中显示的初始值不同的用户名进行保存。您可以在下面找到代码 from django.contrib.auth.forms import UserCreationForm class AdminUserCreationForm(UserCreationForm): """ AdminForm for c

我使用从django的UserCreationForm继承的自定义表单来添加用户。无论如何,我必须为用户名字段设置不同的初始值。它工作得很好,但在点击保存按钮后,用户将使用与表单中显示的初始值不同的用户名进行保存。您可以在下面找到代码

from django.contrib.auth.forms import UserCreationForm


class AdminUserCreationForm(UserCreationForm):

    """
    AdminForm for creating an instance of custom USER_MODEL.
    """
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ("username", "email")
        field_classes = {'username': UsernameField}

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.initial['username'] = random_username_generator()
        self.fields['username'].disabled = True
        self.fields['password1'].required = False
        self.fields['password2'].required = False

    def clean_username(self):
        username = self.cleaned_data['username'].lower()
        try:
            User.objects.get(username=username)
        except User.DoesNotExist:
            return username
        raise forms.ValidationError('A user with username {} already exists'.format(username))

    def clean_email(self):
        email = self.cleaned_data['email'].lower()
        try:
            User.objects.get(email=email)
        except User.DoesNotExist:
            return email
        raise forms.ValidationError('A user with email {} already exists'.format(email))

    def save(self, commit=True):
        import ipdb; ipdb.set_trace();
        user = super(AdminUserCreationForm, self).save(commit=False)
        # user = self.instance
        qb = QuickBlox()
        qb_password = reset_password_generator()
        user.qb_password = qb_password + 'vx'
        user.save()
        attempt = LoginAttempts()
        attempt.user = user
        attempt.save()
        send_invite_mail(user)
        return user

表单的init被调用两次。表单送达时,一次在GET请求中,一次在POST请求中,第一个请求的初始用户名可能已发布。然后表单保存在
request.POST
中发布的值,而不是字段的初始值。如果用户没有键入不同的内容,则保存的值可能是上一个请求的初始值。我将此字段设置为disabled=True。但在点击save somehowGets后,它仍然会更改。从哪个状态更改?根据您在隐藏输入中看到的内容或post请求过程中的初始值?@Schwobasegll在初始屏幕上更新了我的问题,表单中显示的用户名不是在点击saveDisabled inputs后保存到db的用户名,根本不提交。因此,将获取下一个表单实例化的初始值,该值将再次调用随机函数。如果在表单的init中记录/打印初始值,就可以看到这一点。