相关对象引用(Related objects reference)[翻译学习]

类RelateManager

  一个'related manager'是一个用于在一对多,或者多对多的关联上下文中的管理器,例如在下面的两个情况下:

 (1)。另一边的外键关联,如:

class Reporter(models.Model):
   // ...
class Article(models.Model):
   // 
   reporter = models.ForeignKey(Reporter)

  在上面的例子中,下面的方法在reporter.article_set 管理器中可用。

 

(2)两边都有的多对的关联:

class Topping(model.Model):
  // ...

class Pizza(model.Model):
  toppings = models.ManyToManyField(Topping)
  // ...

  在这个例子当中,下面的方法在topping.pizza_set 和pizza.toppings中都可用。

 

关联管理器有如下的额外方法:

 

 (1) add(obj[,obj2,...])

   将指定的模型对象添加到相关联对象集。

  例如:

b = Blog.objects.get(id=1)
e = Entry.objects.get(id=234)
b.entry_set.add(e) # associates entry a with blog b

(2)create(**kwargs)

 创建一个新的对象,保存到关联对象集中,返回最新创建的对象。

b = Blog.objects.get(id=1)
c = Entry(
blog=b,
headline='Hello',
body_text='Hi',
pub_date=datatime.date(2005,1,1)
)
e.save(force_insert=True)

注意,在定义关联时不需要指定模型的关键字,在上面的示例中,我们没有传递参数blog给create()。Django识别出新的Entry对象的blog字段应该被设置成b。

 

3.remove(obj1[,obj2,...])

从关联集中删除指定的模型对象

b = Blog.objects.get(id=1)
e = Entry.objects.get(id=234)
b.entry_set.remove(e) # disassociates Entry e form blog b

为了防止数据库不一致,这个方法仅仅存在于null=True的ForeignKey对象中。如果关联字段不能设置为None(NULL),

那么一个对象不能在没有添加到别一个时从一个关联中删除。在上面的示例中,从b.entry_set()删除e,相当于

e.blog = None,并且因为blog ForeignKey并没有null=True的属性,这是非法的。。

 

4.clear()

 从关联对象集中删除所有对象。

b = Blog.objects.get(id=1)
b.entry_set.clear()

注意这并没有删除关联对象,它只是取消他们的关联。

如remove(),clear()只是在当null=True在ForeignKey时可用。

 

 

 

 

 

 

你可能感兴趣的:(django,外键关联)