Django ForeignKey关系约束

时间:2015-11-22 18:12:26

标签: django django-models django-orm

我是否可以强制执行ForeignKey关系,以便 Reporter 撰写的文章无法由其他 Reporter 撰写?< / p>

我试图实施&#34;对象遏制&#34;并支持将文章分配给 Reporter &#34;文件夹&#34;。

例如, ReporterOne &#34;文件夹&#34;包含文章A,B,C ,如果文章A,B,C 被分配到&#34; (即包含在 ReporterOne的文件夹中, 无法分配 ReporterTwo

2 个答案:

答案 0 :(得分:1)

使用OneToOneField。来自文档:

  

要定义一对一关系,请使用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)

答案 1 :(得分:0)

ArticleForeignKeyReporter。因此,每个Article只会属于一个Reporter。然后将名为folder的属性添加到Article,并将其用作哈希键,以确定Articles中包含的folder是什么。

要查找给定Articles的名为folder的{​​{1}}中的所有Foo,您可以执行以下查询:

Reporter

请注意,reporter = Reporter.objects.first() articles_in_folder = reporter.articles_set.filter(folder='Foo') 也可以是整个模型而不仅仅是字符串。 folder有一个ForeingKey Article,而folder也可以folderForeingKey