我尝试将移动设备添加并保存到名为 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)
这就是解决方案:
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)