1. 程式人生 > >django 在建模時的一個手賤

django 在建模時的一個手賤

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 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 在建模時的一個手賤