如何在一个应用程序中使两个模型反向关联?
class User(AbstractUser):
user_status = models.ForeignKey(Status)
class Status(models.Model):
users = models.ManyToManyField(User, blank=True)
答案 0 :(得分:2)
Django自动为您完成。因此,您不应将其指定为相关模型上的字段。
删除ManyToManyField
上的Status
。然后,如果您有Status
对象,则可以使用status.user_set.all()
引用反向关系。或者,您可以在related_name
上添加ForeignKey
,也可以使用自定义名称:
user_status = models.ForeignKey(Status, related_name="users", on_delete=models.SET_NULL, null=True, blank=True)
请注意,我添加了on_delete
,因为这是Django 2.x的要求,它会强制您指定删除Status
时的情况。
status = Status.objects.first()
status.users.all() # all users for that status
答案 1 :(得分:0)
您可以使用status_set
访问用户的状态:
user = User.objects.first()
user.status_set.all() # get all status of a user
您可以使用related_name
参数为反向名称分配另一个名称:
class Status(models.Model):
users = models.ManyToManyField(User, blank=True, related_name='states')
user = User.objects.first()
user.states.all()