django 在建模时的一个手贱

Posted 蒋乐兴的技术随笔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 在建模时的一个手贱相关的知识,希望对你有一定的参考价值。

最近在写一个网站,在建立model的时候遇到了一些问题,最后找了好久才找到为什么。

 

一、django的model定义如下:

from django.db import models

# Create your models here.

class Person(models.Model):
    name=models.CharField(max_length=8,primary_key=True)



class Student(Person):
    studentID=models.ForeignKey(Person)

 

二、在执行migrate 的时候报如下的错:

python3 manage.py migrate coreapp
SystemCheckError: System check identified some issues:

ERRORS:
coreapp.Student.studentID: (fields.E305) Reverse query name for Student.studentID clashes with reverse query name for Student.person_ptr.
    HINT: Add or change a related_name argument to the definition for Student.studentID or Student.person_ptr.

 

三、引起问题的原因:

  这个问题的原因在于Student这个类定义的时候有错误,由于我最近几年对mysql数据的接触比较多,知道Person表和Student表

  在数据库中是父子表的关系,所以在python代码编写的时候,就自然而然的把Person写在了Student的基类;事实上Student类的

  基类应该是models.Model类。

 

四、正确写法

from django.db import models

# Create your models here.

class Person(models.Model):
    name=models.CharField(max_length=8,primary_key=True)



class Student(models.Model):
    studentID=models.ForeignKey(Person)

 由于源码不能公布出来,所以这个例子中的类设计就比较“粗糙”了;但是哪理不糙呀!

 

----

以上是关于django 在建模时的一个手贱的主要内容,如果未能解决你的问题,请参考以下文章

KeyError:“文件名”(熊猫)

ansys下面的变形的单位是啥啊

@vue/cli 3 一个关于yarn安装时的坑

添加片段时的 FlyOut 菜单设计问题

如何在 Django Summernote 中显示编程片段的代码块?

应该先创建 ER 图还是类图?