django 在建模時的一個手賤
阿新 • • 發佈:2017-07-26
pytho 設計 iss 建立 類設計 for ever err 數據庫
最近在寫一個網站,在建立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 namefor ‘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 在建模時的一個手賤