具有相同两个类的多对多关系-Django
我有两个类,它们之间有两个多对多关系。因为相邻的表也必须有附加属性,所以我显式地定义了它们。但是我得到一个错误,说我需要更改相关的名称。不知道在哪里做这个。非常感谢您的帮助 以下是我的models.py代码:具有相同两个类的多对多关系-Django,django,many-to-many,models,Django,Many To Many,Models,我有两个类,它们之间有两个多对多关系。因为相邻的表也必须有附加属性,所以我显式地定义了它们。但是我得到一个错误,说我需要更改相关的名称。不知道在哪里做这个。非常感谢您的帮助 以下是我的models.py代码: class Client(models.Model): first_name = models.CharField(max_length=255) last_name = models.CharField(max_length=255) email = models
class Client(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
email = models.CharField(max_length=255)
password = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = UserManager()
def __repr__(self):
return "<User object: {} {} {} {}>".format(self.first_name,
self.last_name, self.email, self.password)
class Therapist(models.Model):
name = models.CharField(max_length=255)
reviews = models.ManyToManyField(Client, through="Review")
appts = models.ManyToManyField(Client, through="Appointment")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = UserManager()
def __repr__(self):
return "<Book object: {}>".format(self.title)
class Review(models.Model):
reviewer = models.ForeignKey(Client, on_delete=models.CASCADE)
therapist_reviewed = models.ForeignKey(Therapist,
on_delete=models.CASCADE)
rating = models.IntegerField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
content = models.TextField()
def __repr__(self):
return "<Review object: {} {}>".format(self.book_reviewed,
self.reviewer)
class Appointment(models.Model):
booked_therapist = models.ForeignKey(Therapist,
on_delete=models.CASCADE)
booked_client = models.ForeignKey(Client, on_delete=models.CASCADE)
date = models.DateTimeField()
massage = models.CharField(max_length=255)
类客户端(models.Model):
first_name=models.CharField(最大长度=255)
last_name=models.CharField(最大长度=255)
email=models.CharField(最大长度=255)
密码=models.CharField(最大长度=255)
已创建\u at=models.DateTimeField(自动\u now\u add=True)
更新的\u at=models.DateTimeField(自动\u now=True)
objects=UserManager()
定义报告(自我):
返回“”格式(self.first\u名称,
self.last_name、self.email、self.password)
班级治疗师(models.Model):
name=models.CharField(最大长度=255)
reviews=models.ManyToManyField(客户机,通过=“Review”)
appts=models.ManyToManyField(客户,通过=“约会”)
已创建\u at=models.DateTimeField(自动\u now\u add=True)
更新的\u at=models.DateTimeField(自动\u now=True)
objects=UserManager()
定义报告(自我):
返回“”格式(self.title)
课堂复习(models.Model):
reviewer=models.ForeignKey(客户端,on_delete=models.CASCADE)
治疗师\u回顾=模型。外籍(治疗师,
on_delete=models.CASCADE)
rating=models.IntegerField()
已创建\u at=models.DateTimeField(自动\u now\u add=True)
更新的\u at=models.DateTimeField(自动\u now=True)
content=models.TextField()
定义报告(自我):
返回“”格式(self.book\u已审核,
自我评价者)
班级预约(models.Model):
预约治疗师=模特。外籍(治疗师,
on_delete=models.CASCADE)
预订的客户机=models.ForeignKey(客户机,on\u delete=models.CASCADE)
日期=型号。日期时间字段()
按摩=models.CharField(最大长度=255)
班级治疗师(models.Model):
name=models.CharField(最大长度=255)
reviews=models.ManyToManyField(客户,相关的治疗师,通过=“Review”)
appts=models.ManyToManyField(客户,相关的治疗师,通过=“预约”)
已创建\u at=models.DateTimeField(自动\u now\u add=True)
更新的\u at=models.DateTimeField(自动\u now=True)
objects=UserManager()
定义报告(自我):
返回“”格式(self.title)
如果您没有为many\u to\u many
字段分配相关的\u名称,则默认的相关字段将设置为model\u lower\u case\u set,但是当您有两个many\u to\u many
字段与同一个模型相关时,两个文件的默认相关\u名称与model\u lower\u case\u set相同,使用相关\u name
查询queryset时,这将导致冲突。班级治疗师(models.Model):
name=models.CharField(最大长度=255)
reviews=models.ManyToManyField(客户,相关的治疗师,通过=“Review”)
appts=models.ManyToManyField(客户,相关的治疗师,通过=“预约”)
已创建\u at=models.DateTimeField(自动\u now\u add=True)
更新的\u at=models.DateTimeField(自动\u now=True)
objects=UserManager()
定义报告(自我):
返回“”格式(self.title)
如果您没有为
many\u to\u many
字段分配相关的\u名称,则默认的相关字段将设置为model\u lower\u case\u set,但是当您有两个many\u to\u many
字段与同一个模型相关时,两个文件的默认相关\u名称与model\u lower\u case\u set相同,使用相关\u name
查询查询集时,这将导致冲突。共享回溯请求错误:application.theraper.appts:(fields.E304)“theraper.appts”的反向访问器与“theraper.reviews”的反向访问器冲突。提示:在“治疗师.appts”或“治疗师.reviews”的定义中添加或更改相关的_name参数。application.theraper.reviews:(fields.E304)“治疗师.评论”的反向访问器与“治疗师.应用程序”的反向访问器冲突。提示:在“治疗师.评论”或“治疗师.评论”的定义中添加或更改相关的_name参数。共享回溯请求错误:application.theraper.appts:(fields.E304)“治疗师.应用”的反向访问器与“治疗师.评论”的反向访问器冲突。提示:在“治疗师.appts”或“治疗师.reviews”的定义中添加或更改相关的_name参数。application.theraper.reviews:(fields.E304)“治疗师.评论”的反向访问器与“治疗师.应用程序”的反向访问器冲突。提示:在“治疗师.评论”或“治疗师.appts”的定义中添加或更改相关的\u name参数。如果显式设置外键,为什么需要相关名称?您将如何将外键与相关名称一起使用?这上面还是有点模糊。非常感谢。解释清楚如果你明确地设置外键,为什么它需要一个相关的名称?您将如何将外键与相关名称一起使用?这上面还是有点模糊。非常感谢。请解释清楚
class Therapist(models.Model):
name = models.CharField(max_length=255)
reviews = models.ManyToManyField(Client, related_name='therapist_reviews', through="Review")
appts = models.ManyToManyField(Client, related_name='therapist_appts', through="Appointment")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
objects = UserManager()
def __repr__(self):
return "<Book object: {}>".format(self.title)