2012-11-05 70 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