Django 外键关系约束



我是否可以强制执行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的名为 Foofolder中的所有Articles,您可以执行如下查询:

reporter = Reporter.objects.first()
articles_in_folder = reporter.articles_set.filter(folder='Foo')

请注意,folder也可以是整个模型,而不仅仅是字符串。Article将有一个用于folder的ForeingKey,folder也可以有一个ForeingKeyReporter

最新更新