【问题标题】:Related to foreign key , Django外键相关,Django
【发布时间】:2021-10-04 21:24:59
【问题描述】:

我是 Django 的新用户,我有两个模型,一个是 Department,另一个是 Employee。我需要链接这两个表,以便能够在表中查看每个部门下的详细信息。但是我收到一个错误,因为“NOT NULL 约束失败:pom_employee.department_id”。我没有在这个项目中使用表格。请帮帮我

In models.py

class Department(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

class Employee(models.Model):
    name = models.CharField(max_length=124)
    age = models.IntegerField()
    department = models.ForeignKey(Department,on_delete=models.CASCADE,null=True)

    def __str__(self):
        return self.name

In views.py

def empdata(request):
    if request.method == "POST":
        name = request.POST.get('empname', False)
        age = request.POST.get('empage', False)

        try:
            Employee.objects.create(name=name, age=age)

            return redirect('/showemp')
        except Employee.DoesNotExist:
            print("I am in except")
            Employee.objects.get(name=name, age=age).save()
    return render(request, 'showempdetails.html')

【问题讨论】:

  • 我认为如果您在“部门”的名称字段中添加非空值,它会起作用(如果它起作用,请告诉我解释一下)
  • 如果您在第一次迁移后添加了not null,请确保您在修改后已迁移以按预期工作。迁移:python manage.py makemigrations 并迁移:python manage.py migrate
  • 我认为您有一些未应用的迁移。请运行您的迁移并检查是否有帮助。
  • @Ram 我做了 python manage.py makemigrations 和 python manage.py migrate
  • 你可以浏览这个帖子:stackoverflow.com/questions/25964312/…

标签: python mysql django foreign-keys


【解决方案1】:

你可以试试这个。如果它给出任何错误,请告诉我它说的是什么:

class Department(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

class Employee(models.Model):
    name = models.CharField(max_length=124)
    age = models.IntegerField()
    department = models.ForeignKey(Department,on_delete=models.CASCADE,null=True, blank=True)

    def __str__(self):
        return self.name


views.py

    def empdata(request):
        if request.method == "POST":
            name = request.POST.get('empname')
            age = request.POST.get('empage')
            
            try:
                emp = Employee(name=name, age=age)
                emp.save()
                return redirect('/showemp')
            except Employee.DoesNotExist:
                print("I am in except")
        return render(request,'showempdetails.html')

您可以删除旧迁移并再次运行新迁移。

【讨论】:

  • 感谢您的回复,但我遇到了与以前相同的错误。 @贾福尔
  • @DevikaBRaj 我看不出代码有什么问题,您只需删除您的migrationsdb.sqlite3 文件并重新迁移即可。
  • 正如你所说,我删除了 db.sqlite3,做了 makemigrations 和 migrate 并且很高兴地说错误已被删除并且数据正在添加到表中。现在的问题是外键字段(部门ID)没有显示任何值,显示为NULL。
  • @DevikaBRaj 您没有在views.py 文件中添加任何`foreignkey` 的值。所以它显示null
【解决方案2】:

如果你想要空白,那么不要使用级联

    department = models.ForeignKey(Department,on_delete=models.CASCADE,null=True, blank=True)

改变

    department = models.ForeignKey(Department,null=True, blank=True)

【讨论】:

  • 如果我删除部门名称,它应该警告用户与部门的数据链接,这就是我使用 CASCADE 的原因,我是否应该使用它? @Mesut GENEZ
猜你喜欢
  • 2018-08-05
  • 2012-05-07
  • 1970-01-01
  • 2019-01-29
  • 2017-06-08
  • 2012-09-20
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
相关资源
最近更新 更多