我是否可以强制执行ForeignKey
关系,以便 Reporter 撰写的文章无法由其他 Reporter 撰写?< / p>
我试图实施&#34;对象遏制&#34;并支持将文章分配给 Reporter &#34;文件夹&#34;。
例如, ReporterOne &#34;文件夹&#34;包含文章A,B,C ,如果文章A,B,C 被分配到&#34; (即包含在 ReporterOne的文件夹中, 无法分配到 ReporterTwo 。
答案 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)
Article
有ForeignKey
到Reporter
。因此,每个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
也可以folder
到ForeingKey
。