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)

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

----

原文地址:https://www.cnblogs.com/JiangLe/p/7236751.html