0

我有以下模型,我需要创建一个表单,该表单允许更新现有响应(之前使用 slug 生成,然后通过电子邮件发送给受访者)并Rating为每个CVin CV.objects.all(). 在 Django 中执行此操作的最简单方法是什么。目前我有一个基于类的 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()
4

1 回答 1

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})
于 2013-04-20T15:18:48.760 回答