【问题标题】:UNIQUE constraint failed: Student_assignments.user_id唯一约束失败:Student_assignments.user_id
【发布时间】:2019-02-12 15:30:01
【问题描述】:

我正在尝试实现 Student 已连接到用户分配已连接到 Student。

Django 迁移问题。

django.db.utils.IntegrityError:唯一约束失败:Student_student.user_id

models.py 文件

models.py

from django.db import models
from django.utils import timezone
from django.core.validators import MinLengthValidator,MaxValueValidator
from django.contrib.auth.models import User


# Create your models here.
class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE,primary_key=True,default=111111)
    student_name = models.CharField(max_length = 20)
    student_address = models.TextField()
    student_bloodgrp = models.CharField(max_length = 3)
    #This will be used to upload image of student in some directory not in database
    student_image = models.ImageField(upload_to ='profile_pic/')
    student_mail = models.EmailField()
    student_dob = models.DateTimeField()
    student_branch = models.CharField(max_length = 3)
    student_reg_no = models.IntegerField(validators=[MaxValueValidator(9999999999)])
    student_mob = models.IntegerField(validators=[MaxValueValidator(9999999999)])
    student_sem = models.IntegerField(validators=[MaxValueValidator(8)])
    student_accom = models.CharField(max_length = 1) # y for boarders & n for non-boarders

    class Meta:
        verbose_name_plural = "Students"







class Subjects(models.Model):
    subjectName = models.CharField(max_length=100,primary_key=True)
    branch = models.CharField(max_length=100)
    semester = models.IntegerField()

    class Meta:
        verbose_name_plural = "Subjects"

    def __str__(self):
        return self.subjectName+"--"+self.branch+"--"+str(self.semester)


class Assignments(models.Model):
    student = models.ForeignKey(Student,on_delete=models.DO_NOTHING)
    subject = models.ForeignKey(Subjects,on_delete=models.DO_NOTHING)
    document = models.FileField(upload_to='assignments/')

    class Meta:
        verbose_name_plural = "Assignments"



    def __str__(self):
        return self.student.student_name

这里是forms.py

forms.py  


from django import forms
from .models import Assignments


class AssignmentForm(forms.ModelForm):
    class Meta:
        model = Assignments
        fields = ('student', 'document','subject' )


    ******************************************************************
views.py here 

views.py

from django.shortcuts import render,redirect
from .forms import AssignmentForm
from django.contrib.auth.decorators import login_required

def mainStudent(request):

    return render(request,'Student/main.html')


def masterStudent(request):

    return render(request,'Student/master.html')



@login_required
def uploadAssignment(request):
    if request.method == 'POST':
        form = AssignmentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('student-main')
    else:
        form =AssignmentForm()


    return render(request, 'Student/upload_Assignment.html', {
        'form': form
    })

我希望学生用户 ID 和密码连接到 User 。 分配第一个字段为学生。

【问题讨论】:

    标签: django


    【解决方案1】:

    您正在为 OneToOneField 使用默认值,这没有任何意义。使用OneToOneField 意味着每个User 只能有一个Student 记录。默认值将在第一次创建 Student 而没有 User 时起作用,但下一次它将因唯一约束错误而失败。迁移可能会尝试添加多个 Student 记录而没有 User

    您应该删除默认值并检查您的数据以了解没有Users 的Students 来自何处。或者,您可以使 user 字段为空并删除 primary_key=True 以便 Django 创建隐式 id 主键:

    class Student(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
    

    【讨论】:

      猜你喜欢
      • 2019-04-28
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      相关资源
      最近更新 更多