如何在Django模型之间建立关系

时间:2020-03-03 03:38:15

标签: django

我有两个模型,一个是用户模型,另一个是联系人模型。

联系人模型如下:

class Contact(models.Model):  
    pass
    user          = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, null=True, on_delete=models.CASCADE, verbose_name=_('User'), related_name="user")
    contact       = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, null=True, on_delete=models.CASCADE, verbose_name=_('Contact'), related_name="contact")
    created_at    = models.DateTimeField(auto_now=False, auto_now_add=True)
    updated_at    = models.DateTimeField(auto_now=True, auto_now_add=False)
    is_contact    = models.BooleanField(default=False)

基本上,该操作是为用户创建联系人。一种朋友要求并接受简单的模型。因此,已登录的用户(request.user)可以是contact.user或contact.contact。

和设置。AUTH_USER_MODEL是CustomUser模型:

class CustomUser(AbstractUser):
    pass
    email = models.EmailField(unique=True)
    first_name = models.CharField(max_length=20, default="", blank=True)
    last_name = models.CharField(max_length=20, default="", blank=True)

我该如何建立关系,可以通过以下方式与用户取得联系:

// get user contacts user=CustomUser.objects.get(pk=1)
user.contacts.objects.all()

1 个答案:

答案 0 :(得分:0)

通常,您使用 related_name 关键字查询反向关系,默认情况下,该关键字为 contact_set

user.contact_set.all()

如果要更改此反向关系的名称,则需要在 Contact 模型中使用 related_name :< / p>

class Contact(models.Model):  
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="contacts", ...)


user.contacts.all()