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 在建模时的一个手贱的主要内容,如果未能解决你的问题,请参考以下文章