2015-10-05 70 views
1

所以我有一个电子邮件模型,它将包含大量的问题。目前,我希望电子邮件模型在保存模型时自动添加所有问题。与Django中的另一个模型的查询集创建多对多关系

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

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()但它并没有因此任何帮助将是巨大的。

回答

2

我们可以调用.questions.add()保存的对象*questions作为参数来做到这一点。

首先我们将对象保存在数据库中。然后,我们通过使用*选项来传递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文件)
添加指定的模型对象到相关对象 集。

+0

完美。非常感谢你。 – danwilson

+0

现在我只想得到积极的问题。我将上面的代码修改为'Question.objects.filter(active = True)',但它仍然提出了所有问题。有任何想法吗? – danwilson

+0

也许所有的问题目前都是活跃的。尝试在shell和代码中比较'Question.objects.filter(active = True).count()'的值。 –

相关问题