模型类:
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参数