将移动字段添加到自定义用户配置文件

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

我尝试将移动设备添加并保存到名为 SecurityMan 的自定义用户配置文件模型,但没有成功。我需要帮助才能实现这一目标。谢谢。

这是错误(“securityman_id”列中 /en/register/null 值的 IntegrityError 违反了非空约束详细信息:失败行包含 (81, 2023-09-04 19:53:58.813234+00, f, null, 0555851717, 空, profile1.png, 1, 空, 空, 空, 0, 0))

view.py

    def registerPage(request):
    form = CreateUserForm()
    form2 = CustomerForm()
    if request.method == "POST":
    form = CreateUserForm(request.POST, request.FILES)
    form2 = CustomerForm(request.POST, request.FILES)
    if form.is_valid():  # and form2.is_valid():
    securityman = form.save()
    mobile = form2.data.get("mobile")
    print(mobile) #working
            
    username = form.cleaned_data.get("username")
    messages.success(request, _("Account was created for ") + username)
    return redirect("login")

    else:
    form = CreateUserForm()
    form2 = CustomerForm()
    context = {"form": form, "form2": form2}
    return render(request, "account/register.html", context)

form.py

    class CustomerForm(ModelForm):
    mobile = forms.CharField(max_length=17)
    class Meta:
    model = SecurityUser
    fields = ['mobile']

    class CreateUserForm(UserCreationForm):
    #mobile = forms.CharField(max_length=200)

    class Meta:
    model = User
    fields = [
    "username",
    "first_name",
    "last_name",
    #"mobile",
    "email",
    "password1",
    "password2",
    ]

Model.py

class SecurityUser(models.Model):
    CHOICES = (1, "Security Man"), (2, "Supervisor")
    securityman = models.OneToOneField(
    User, verbose_name="Security Man", on_delete=models.CASCADE, editable=False)
    loggedin_dt = models.DateTimeField(auto_now=True)
    active_user = models.BooleanField(verbose_name="Activate User", default=False)
    name = models.CharField(verbose_name="Account ID", max_length=200, null=True)
    fname = models.CharField(verbose_name="First Name", max_length=200, null=True)
    lname = models.CharField(verbose_name="Last Name", max_length=200, null=True)
    mobile = models.CharField(max_length=200, blank=True, null=True)
    email = models.EmailField(verbose_name="Email Address", max_length=200, blank=True, null=True)
python django-models django-views django-forms
1个回答
0
投票

这就是解决方案:

def registerPage(request):
    # form = CreateUserForm()
    if request.method == "POST":
        form = CreateUserForm(request.POST)
        form2 = CustomerForm(request.POST)
        if form.is_valid() and form2.is_valid():
            securityman = form.save(commit=False)
            # securityman.set_password(form.cleaned_data["password"])
            securityman.save()
            username = form.cleaned_data.get("username")
            mobile = form2.cleaned_data.get("mobile")
            securityman2 = SecurityUser.objects.filter(name=username).update(
                mobile=mobile
            )
            messages.success(request, "Account was created for " + str(username))
            return redirect("login")
    else:
        form = CreateUserForm()
        form2 = CustomerForm()
    context = {"form": form, "form2": form2}
    return render(request, "account/register.html", context)
© www.soinside.com 2019 - 2024. All rights reserved.