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)

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

 

----

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值