Django-orm报错:fields.E304,fields.E305

模型类:

class PatientInfoModel(models.Model):
    '''老人的信息'''
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=128,verbose_name='老人姓名',null=True)
    sex = models.CharField(max_length=32,verbose_name='性别:男,女',null=True)
    health = models.ForeignKey(to='PatientHealthInfoModel', on_delete=models.CASCADE, null=True,related_name='patientinfo', related_query_name='patientinfo')

class PatientHealthInfoModel(models.Model):
    '''老人健康档案:与PatientInfoModel,是一对一关系'''
    id = models.AutoField(primary_key=True)
    cuisine = models.CharField(max_length=128)
    preference = models.TextField,null=True)
    
class PatientPastHistoryInfoModel(models.Model):
    '''老人的既往史:就历史诊断的情况,与老人健康档案表,是多对一的关系'''
    id = models.AutoField(primary_key=True)
    diagnosis = models.TextField(verbose_name='老人的诊断情况',null=True)
    disease = models.TextField(verbose_name='老人的病症',null=True)
    cure = models.TextField(verbose_name='老人的治疗情况',null=True)
    patient_health_info_f = models.ForeignKey(to='PatientHealthInfoModel', on_delete=models.CASCADE, null=True,related_name='patientinfo', related_query_name='patientinfo')

报错:

patient.PatientInfoModel.patient_health_info_f: (fields.E304) Reverse accessor for 'patient.PatientInfoModel.patient_health_info_f' clashes with reverse accessor for 'patient.PatientPastHistoryInfoModel.patient_health_info_f'.
        HINT: Add or change a related_name argument to the definition for 'patient.PatientInfoModel.patient_health_info_f' or 'patient.PatientPastHistoryInfoModel.patient_health_info_f'.
patient.PatientInfoModel.patient_health_info_f: (fields.E305) Reverse query name for 'patient.PatientInfoModel.patient_health_info_f' clashes with reverse query name for 'patient.PatientPastHistoryInfoModel.patient_health_info_f'.
        HINT: Add or change a related_name argument to the definition for 'patient.PatientInfoModel.patient_health_info_f' or 'patient.PatientPastHistoryInfoModel.patient_health_info_f'.
patient.PatientPastHistoryInfoModel.patient_health_info_f: (fields.E304) Reverse accessor for 'patient.PatientPastHistoryInfoModel.patient_health_info_f' clashes with reverse accessor for 'patient.PatientInfoModel.patient_health_inf
o_f'.
        HINT: Add or change a related_name argument to the definition for 'patient.PatientPastHistoryInfoModel.patient_health_info_f' or 'patient.PatientInfoModel.patient_health_info_f'.

表之间的关系:

产生报错的原因:

1、PatientPastHistoryInfoModel  一对多外键在这里,且设置了related_name = patientinfo

2、PatientInfoModel 一对一外键在这里,且设置了related_name = patientinfo

由于这两张表设置的是同一张表,就产生同名的 冲突了,类似给PatientHealthInfoModel 创建两个虚拟字段名,都叫patientinfo,所以报错了

解决方法:

将其中一张表的外键字段进行修改:

models.ForeignKey(to='PatientHealthInfoModel', on_delete=models.CASCADE, null=True,related_name='patientinfo_new', related_query_name='patientinfo_new')

1、只要两张设置的名字不要一样就可以,

2、或直接不设置related_name和 related_query_name参数

猜你喜欢

转载自blog.csdn.net/weixin_46371752/article/details/130287415