0

在我的模型中,我有这样的 ForeignKey 关系:

class Question(models.Model):    
    question = models.TextField(null=False)

class Answer(models.Model):                                                    
    question =    models.ForeignKey(Question, related_name='answer')    
    user = models.ForeignKey(User)
    class Meta:
        unique_together = (("question", "user"),)  

提交答案的相应 URL 包含问题的 id,如下所示:

url(r'^a/(?P<pk>\d+)/$', AnswerQuestion.as_view(), name='answer-question'),

对于来自 self.request.user 的用户,我试图获得类似的东西CreateOrUpdateView,以便为用户和 URL 方案提供一些方便的导航。

直到现在我尝试了这个:

class AnswerQuestion(LoginRequiredMixin, CreateView):

并添加初始值,但由于 pk 这并不干净。我遇到了UpdateView问题,因为我必须为表单设置默认值。

有没有人做过这样的事情?我宁愿避免为同一个答案创建和更新视图。

4

1 回答 1

1

和真的没有什么不同UpdateViewCreateView唯一的区别是UpdateView设置self.objectself.get_object()CreateView设置为None

最简单的方法是子类化UpdateView和覆盖get_object()

AnswerQuestionView(LoginRequiredMixin, UpdateView):
    def get_object(queryset=None):
        if queryset is None:
            queryset = self.get_queryset()

        # easy way to get the right question from the url parameters:
        question = super(AnswerQuestionView, self).get_object(Question.objects.all())

        try:
            obj = queryset.get(user=self.request.user, question=question)
        except ObjectDoesNotExist:
            obj = None
        return obj

如果存在,则返回正确答案,None如果不存在。当然,将您需要的任何属性添加到类中,例如modelform_class

于 2013-09-24T20:27:23.573 回答