【发布时间】:2016-03-30 09:57:22
【问题描述】:
我知道 ForeignKeys 和 OneToOneFields 是什么,还有 ManyToManyField,它们是如何工作的,以及何时使用它们。但是,我正在处理一个项目,其关系的 Many 部分无法修改。所以,假设I want to let a user have many phone numbers,我通常会这样做:
# my_app/models.py
from django.db import models
class User(Model):
...
class PhoneNumber(models.Model):
user = models.ForeignKey(User)
我遇到的问题是我的 PhoneNumber 模型等价物来自第三方包,已经填充了记录,并且没有在我自己的应用程序中进行子类化。那是
# third_party_django_package/models.py
from django.db import models
class PhoneNumber(models.Model):
# This cannot change
# my_app/models.py
from django.db import models
from third_party_django_package.models import PhoneNumber
class User(Model):
# These do not work -- a user can have more than one phone number
phone_number = models.ForeignKey(PhoneNumber)
phone_number = models.OneToOneField(PhoneNumber)
# This is close, but I want a phone number to belong to only one User
phone_numbers = models.ManyToManyField(PhoneNumber, related_name=...)
def clean(self):
# Validating the M2M relation costs extra queries, is slow, and
# is prone to race conditions
这都是伪代码。
如果不使用访问 Django 内部成员的yet another third-party package,这使得项目的前向兼容性更差,我还有哪些选择来实现具有正确架构级约束的正确 OneToManyField?
【问题讨论】:
标签: django