2013-04-03 53 views
0

我有以下模型,我需要创建一个允许更新现有响应的表单(以前用slug生成,然后通过电子邮件发送给答复者)以及创建Rating对于CV.objects.all()中的每个CV。 Django中最简单的方法是什么?目前我有一个基于类的UpdateView for Response,就是这样。将基于类的UpdateView扩展到速率对象

class Response(models.Model): 
    first_name = models.CharField(max_length=200, null=True, blank=True) 
    last_name = models.CharField(max_length=200, null=True, blank=True) 
    email = models.EmailField(max_length=254) 
    slug = models.SlugField(max_length=32) 
    submited = models.BooleanField(default=False) 
    submit_time = models.DateTimeField(null=True, blank=True) 
    creation_time = models.DateTimeField(auto_now_add=True) 


class CV(models.Model): 
    title = models.CharField(max_length=200) 
    image = models.ImageField(upload_to=content_file_name) 


class Rating(models.Model): 
    cid = models.ForeignKey('CV') 
    rid = models.ForeignKey('Response') 
    score = models.IntegerField() 
    comment = models.TextField() 

回答

0

我终于搞清楚了如何做到这一点。我的代码如下,以防有人感兴趣。

def add_response(request): 
    CVs = CV.objects.all() 
    if request.method == "POST": 
     ResForm = ResponseForm(request.POST, instance=Response()) 
     RatForms = [RatingForm(request.POST, prefix=str(cv.id), instance=Rating(cid=cv)) for cv in CVs] 
     if ResForm.is_valid() and all([rf.is_valid() for rf in RatForms]): 
      new_response = ResForm.save(commit=False) 
      new_response.submit_time = datetime.now() 
      new_response.submited = True 
      new_response.save() 
      for rf in RatForms: 
       new_rating = rf.save(commit=False) 
       new_rating.rid = new_response 
       new_rating.save() 
      return HttpResponseRedirect('/thanks/') 
     else: 
      for i, _ in enumerate(RatForms): 
       RatForms[i].cv = CV.objects.filter(id=int(RatForms[i].prefix))[0] 
       print RatForms[i].cv 
      return render(request, 'response.html', {'response_form': ResForm, 'rating_forms': RatForms}) 
    else: 
     ResForm = ResponseForm(instance=Response()) 
     RatForms = [RatingForm(prefix=str(cv.id), instance=Rating(cid=cv)) for cv in CVs] 

     for i, _ in enumerate(RatForms): 
      RatForms[i].cv = CV.objects.filter(id=int(RatForms[i].prefix))[0] 
      print RatForms[i].cv 

     return render(request, 'response.html', {'response_form': ResForm, 'rating_forms': RatForms})