Django ORM:ManyToMany插入

时间:2016-06-13 18:50:22

标签: django orm

这些是我的模特:

class Content(models.Model):
    name = models.CharField(_(u"Name"), max_length=50)
    recipients = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)

class Delivery(models.Model):
    name = models.CharField(_(u"Name"), max_length=50)
    permissions = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)
    content = models.ForeignKey(Content, null=True)

我正在覆盖Delivery的保存方法,这样当我创建一个交付时,也会创建一个新内容:

def save(self, *args, **kwargs):
    is_insert = False
    if self.pk:
        content = Content.objects.get(pk = self.content.pk)
        content.name = 'Delivery: '+self.name
        content.save()
    else:
        is_insert = True            
        content = Content()
        content.name = 'Delivery: '+self.name       
        content.save()                        
        self.content = content

    super(Delivery, self).save(*args, **kwargs)

    if is_insert:
        content.recipients.add(self.permissions)                    
        content.save()

我的问题是我没有在Content.recipients中插入与Delivery.permissions中相同的用户。

我该怎么做? 谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

你可以尝试做的是:

delivery = Delivery.objects.get(name="some_name")

(只是一个小小的注意事项:请记住,Delivery模型必须有一个与“some_name”相关联的对象,否则get()将抛出一个错误,即返回了2个对象)

现在, permissions = delivery.permissions.all()

con = Content.objects.get(name="content_name")

(适用同方)

现在只需:con.recipients.add(*permissions)。如果要为所有Content对象添加相同的权限,则可以简单地遍历Content.objects.all()的每个对象,并对上面针对单个内容对象执行上述add操作。

希望这有帮助。

答案 1 :(得分:0)

您可能希望尝试迭代传递权限并为循环中的每个权限添加内容收件人。

   <img alt="Some text I want styled" />

   img {
     font-size: 30px
   }