首页 > 解决方案 > 如何解决我的 Django 项目中的完整性错误

问题描述

我有一个管理员在登录网站时用来注册学生的表格。我扩展了 Django User 模型以适应性别、电话、profile_pic、时间等内容。每次我填写字段时,我都会收到此错误UNIQUE constraint failed: backend_extenduser.user_id on the browser 当我向下滚动一点时,我看到了 上述异常(UNIQUE constraint failed: backend_extenduser.user_id)是以下异常的直接原因 我想知道这是什么原因造成的?以及如何解决这个问题我有另一个具有相同代码库的项目,该项目运行良好,但我正在处理的这个项目正在引发错误。以下是我的代码

在模型.py

class ExtendUser(models.Model):
    MALE = 'ML'
    FEMALE = 'FM'
    GENDER = [
        (MALE, 'Male'),
        (FEMALE, 'Female'),
    ]
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    phone = models.CharField(max_length=15)
    profile_pic = models.ImageField(verbose_name='Profile Picture', blank=True, null=True, upload_to='backend_uploads')
    gender = models.CharField(max_length=2, choices=GENDER, default=MALE, blank=False, null=True)
    time = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.user.username

我想减少我的 forms.py 以仅显示我将附加字段添加到 Django 用户模型的代码

class ExtendUserForm(forms.ModelForm):


    class Meta():
        MALE = 'ML'
        FEMALE = 'FM'
        GENDER = [
            (MALE, 'Male'),
            (FEMALE, 'Female'),
        ]
        model = ExtendUser
        exclude = ('time', 'user')
        widgets = {
            'phone':forms.TextInput(attrs={'class':'form-control'}),
            'gender':forms.RadioSelect(choices=GENDER),
            'profile_pic':forms.ClearableFileInput()
        }

在我的views.py我有下面的代码,你可以在下面的代码中看到我已经导入了在forms.py上创建的Register()类。我试图不显示整个代码以避免它太笨重

def register(request):
    if request.method == 'POST':
        register_form = Register(request.POST)
        extend_form = ExtendUserForm(request.POST, request.FILES)
        if register_form.is_valid() and extend_form.is_valid():
            form1 = register_form.save()
            form2 = extend_form.save(commit=False)
            form2.user = form1
            extend_form.save()
            messages.success(request, 'Student have been registered successfully')
    else:
        register_form = Register()
        extend_form = ExtendUserForm(request.POST, request.FILES)
    return render(request, 'backend/add-student.html', {'reg':register_form, 'ext':extend_form})

在我的模板上

<form  method="post" class="form" enctype="multipart/form-data">
            {{ reg }}
            {{ ext }}
           {% csrf_token %}
           <input type="submit"  class="btn btn-success btn-block" value="Add Student">
</form>

标签: djangopython-3.x

解决方案


推荐阅读