在Django中创建与多个模型的查询集的多对多关系

时间:2015-10-05 14:35:26

标签: python django django-models

所以我有一个电子邮件模型,其中包含大量问题。目前,我希望电子邮件模型在保存模型时自动添加所有问题。

到目前为止,这是我的问题和电​​子邮件模型的样子:

class Email(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    name = models.CharField(max_length=100)
    slug = models.SlugField()
    jobnumber = models.IntegerField()
    developer = models.ForeignKey(User, related_name="developer")
    questions = models.ManyToManyField('Question', related_name="questions")
    checked_questions = models.ManyToManyField('Question', related_name="checked_questions")
    signed_off = models.BooleanField(default=False)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        self.questions = Question.objects.all()
        super(Email, self).save(*args, **kwargs)

    def __unicode__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('checklists:detail', args=[str(self.slug)])

class Question(models.Model):
    title = models.CharField(max_length=100)

    def __unicode__(self):
        return self.title

我认为这只会有效self.questions = Question.objects.all()但事实并非如此,任何帮助都会很棒。

1 个答案:

答案 0 :(得分:2)

我们可以使用.questions.add()作为参数调用已保存对象上的*questions

首先我们将对象保存在db中。然后,我们使用questions选项传递*个对象,将所有questionsemail对象相关联。

您可以执行以下操作:

class Email(models.Model):

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)        
        super(Email, self).save(*args, **kwargs) # save the object first
        question_objs = Question.objects.all() 
        self.questions.add(*question_objs) # add all questions using * 

来自.add():

上的文档
  

添加(* OBJ文件)
  将指定的模型对象添加到相关对象   集。