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

Django关联管理器详解
本文详细介绍了Django中关联管理器的使用方法,包括如何通过ForeignKey和ManyToManyField建立模型之间的关联,以及关联管理器提供的add、create、remove和clear等方法的具体应用。

类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时可用。

 

 

 

 

 

 

转载于:https://my.oschina.net/banxi/blog/71081

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值