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'),

user が self.request.user から来ているので、 のようなものを取得CreateOrUpdateViewして、ユーザーと URL スキームの便利なナビゲーションを許可しようとしています。

今まで私はこれを試しました:

class AnswerQuestion(LoginRequiredMixin, CreateView):

初期値を追加しますが、pk のためにきれいではありません。UpdateViewフォームのデフォルト値を設定する必要があるため、問題が発生します。

誰かがこのようなことをしましたか?同じ回答に対して作成ビューと更新ビューを使用することは避けたいと思います。

4

1 に答える 1

1

UpdateViewとは実際にはそれほど違いはありません。CreateView唯一の違いは、 にUpdateView設定self.objectするself.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正しい答えが存在する場合、存在しない場合は正しい答えを返します。もちろん、必要な属性をクラスに追加しmodelますform_class

于 2013-09-24T20:27:23.573 に答える