我想为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)
答案 0 :(得分:2)
您描述的关系不是ForeignKey
,而是 ,这意味着UserProfile
最多与{em> one 相关{{1} },但是ManyToManyField
[Django-doc]。
Region
意味着一个区域可以与零个,一个或多个ManyToManyField
相关,而UserProfile
可以与零个,一个或多个{{ 1}} s。
因此您可以将模型更改为:
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(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用户表中,这比创建另一个表将用户链接至“区域”字段更好。