Django ForeignKey创建

时间:2018-09-21 08:53:11

标签: python django django-models

我想为UserProfile模型分配很多Region,怎么做?

代码

class Region(models.Model):
    name = models.CharField(max_length=30)
    created_at = models.DateTimeField(auto_now=True)

 class UserProfile(models.Model):

    user = models.OneToOneField(

    region = models.ForeignKey(Region, on_delete=models.CASCADE, null=True, blank=True)

2 个答案:

答案 0 :(得分:2)

您描述的关系不是ForeignKey,而是 ,这意味着UserProfile最多与{em> one 相关{{1} },但是ManyToManyField [Django-doc]

Region意味着一个区域可以与零个,一个或多个ManyToManyField相关,而UserProfile可以与零个,一个或多个{{ 1}} s。

因此您可以将模型更改为:

UserProfile

在关系数据库中,这是通过向Regionclass Region(models.Model): name = models.CharField(max_length=30) created_at = models.DateTimeField(auto_now=True) class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) regions = models.ManyToManyField(Region)中添加具有ForeignKey的额外(隐藏)表来实现的。但是Django ORM以“透明”的方式工作,因此隐藏了实现细节。

有关如何“填充”这种关系的更多信息,请参见documentation

答案 1 :(得分:0)

from django.contrib.auth.models import AbstractUser

class UserProfile(AbstractUser):
    regions = models.ManyToManyField(Region,related_name='User')

我认为这是实现所需功能的理想方法。使用ManyToManyField可以将用户配置文件对象映射到多个区域对象,反之亦然。

此外,“继承抽象用户”使您可以将Django表格中的区域字段添加到Django用户表中,这比创建另一个表将用户链接至“区域”字段更好。