2012-11-05 42 views
0

我有一个查询列表,它返回问题的可能解决方案。该列表返回我期待的结果。我正在尝试添加与查询列表中的每个项目相关的复选框表单。它不是很花哨,我只需要检查框并更新模型。我有两个模式如何设置基于模型实例的查询集结果

149 class TaskSolution(models.Model):                           
150  solution   = models.TextField()                         
151  submitter   = models.ForeignKey(User, null=True, blank=True)                  
152  relatedtask  = models.ForeignKey(Task, null=True, blank=True)                  
153  solutionnumber = models.IntegerField(editable=False)                     
154  date_created  = models.DateTimeField(editable=False)                     
155  date_updated  = models.DateTimeField(editable=False)                     
156  confimed_solution = models.BooleanField()                        
157  objects   = SolutionVoteManager() 

160  def save(self, *args, **kwargs):                           
161   if not self.id:                              
162    self.date_created = datetime.now()                        
163   self.date_updated = datetime.now()                         
164   super(TaskSolution, self).save(*args, **kwargs)                      

166  def __unicode__(self):                             
167   return self.id                              

169  def __unicode__(self):                             
170   return "%s" % self.object_pk                           

172  def __unicode__(self):                             
173   return self.solution 


184 class MarkedSolved(models.Model):                           
185  is_solution  = models.BooleanField(verbose_name='')                     
186  related_idea  = models.ForeignKey(Idea, editable=False)                    
187  related_task  = models.ForeignKey(Task, editable=False)                    
188  related_solution = models.IntegerField(editable=False)                     
189  date_updated  = models.DateTimeField(editable=False)                     

191  def save(self, *args, **kwargs):                           
192   self.date_updated = datetime.now()                         
193   super(MarkedSolved, self).save(*args, **kwargs)                      

195  def __unicode__(self):                             
196   return self.id                              

198  def __unicode__(self):                             
199   return "%s" % self.object_pk                           

201  def __unicode__(self):                             
202   return "%s" % self.is_solution 

204 class MarkedSolved(ModelForm):                           
205  class Meta:                                
206   model = MarkedSolved  

现在在我的查看我有以下查询集:

solution_list = TaskSolution.objects.filter(relatedtask__id=task_id) 

这很好,因为它预期将返回的解决方案。我现在遇到的问题是我想将MarkSolved表单初始值与solution_list值关联起来。

393 if request.method == 'POST':                                                        
394   mark_solved_form = PostMarkedSolved(data=request.POST, instance=solution_task) 

基本上我正在寻找这样的查询:

select * from markedsolved a, tasksolution b where a.related_solution=b.solutionnumber and a.related_solution=1 and b.solutionnumber=1 and a.related_task_id = 5 and b.relatedtask_id=5; 

,所有的值从两款车型在查询集相匹配。该查询返回我想要的确切结果,但我现在处于亏损状态,无法根据solution_list结果填充初始值。

+0

这两种模式有关系吗? – Asif

+0

是的。基本上,我想有一个解决方案的列表,并与列表中的每个项目,包含一个复选框,当检查更新类MarkedSolved(models.Model)时,一个独特的形式。 所以在模板中,我可以有{在solved_list%%用于项目}像 与复选框形式 {%ENDFOR%} 沿着目前的项目,我不知道如何给的ModelForm复选框链接solve_list上的每个项目都正确。 – user1462141

回答

2

我认为模型MarkedSolved需要相关领域TaskSolution模型

replce

related_solution = models.IntegerField(编辑= FALSE)

related_solution = models.ForeignKeyField(TaskSolution )

Tempalte

{% for item in solved_list%} 
     <input type = "checkbox" name="{{item.id}}" > {{item.solution}} 
    {% endfor %} 

查看

if request.method == 'POST': 
     for soln in solutions_list: 
     solution_id = request.POST.get(str(soln.id))  
     if solution_id: 
      MarkedSolved.objects.create(
      is_solution = True, 
      related_task = Task.objects.get(id=task_id), 
      related_solution = soln 
      ) 

我没有测试上面的代码,但是这将让你的想法

+0

非常感谢@Asif!你摇滚。这绝对让我走向正确的道路。我用于解决方案列表中的 溶液: solution_id = soln.id 在我看来。然后我能够过滤我需要的物品: if_checked = MarkedSolved.objects.get(related_task__id = task_id,related_solution__id = solution_id) – user1462141

+0

不幸的是我不能赞成这个,因为我的声望还没有15.如果我能我会upvote这个! – user1462141