我是否可以强制执行ForeignKey
关系,使记者撰写的文章不能由其他记者撰写?
- https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_one/
我正在尝试实现"对象包含"并支持将文章分配给报告器"文件夹"。
例如,报告员一"文件夹"包含文章 A、B、C,如果文章 A、B、C 被"分配给"(即包含在(报告一的文件夹中,则不能将它们分配给报告员二。
使用OneToOneField。从文档中:
若要定义一对一关系,请使用一对一字段。在此示例中,地点可以是餐厅:
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
def __str__(self): # __unicode__ on Python 2
return "%s the place" % self.name
class Restaurant(models.Model):
place = models.OneToOneField(Place, primary_key=True)
serves_hot_dogs = models.BooleanField(default=False)
serves_pizza = models.BooleanField(default=False)
def __str__(self): # __unicode__ on Python 2
return "%s the restaurant" % self.place.name
class Waiter(models.Model):
restaurant = models.ForeignKey(Restaurant)
name = models.CharField(max_length=50)
def __str__(self): # __unicode__ on Python 2
return "%s the waiter at %s" % (self.name, self.restaurant)
Article
ForeignKey
Reporter
。因此,每个Article
将只属于一个Reporter
。然后将一个名为 folder
的属性添加到Article
,并将其用作哈希键来确定folder
中"包含"了哪些Articles
。
要查找给定Reporter
的名为 Foo
的folder
中的所有Articles
,您可以执行如下查询:
reporter = Reporter.objects.first()
articles_in_folder = reporter.articles_set.filter(folder='Foo')
请注意,folder
也可以是整个模型,而不仅仅是字符串。Article
将有一个用于folder
的ForeingKey,folder
也可以有一个ForeingKey
来Reporter
。