そこで、基本的なQ&Aサイトを構築しています。各トピックには一連の質問が関連付けられており、各質問には複数の回答が関連付けられています。
質問のユーザー入力を作成していますが、トピックに関連付ける必要があります。これは質問モデルです
#models.py
class Question(models.Model):
movie = models.ForeignKey(Movie, blank=True, null=True)
question_text = models.CharField(max_length = 1000)
question_detail = models.CharField(max_length = 5000, blank = True, null = True)
q_pub_date = models.DateTimeField(auto_now_add = True)
q_author = models.ForeignKey(User)
class QuestionForm(ModelForm):
def save(self, user = None, force_insert = False, force_update = False, commit = True):
q = super(QuestionForm, self).save(commit = False)
q.q_author = user
if commit:
q.save()
return q
class Meta:
model = Question
exclude = ('movie', 'q_author', 'q_pub_date')
これはURLconfです
#urls.py
url(r'^(?P<movie_id>\d+)/add_question/$', 'add_question'),
これがビューです
#views.py
def add_question(request, movie_id):
if request.method == "POST":
form = QuestionForm(request.POST, request.FILES)
#QuestionForm.movie = Movie.objects.get(pk = movie_id)
if form.is_valid():
form.save(user = request.user)
return HttpResponseRedirect("/home/")
else:
form = QuestionForm()
return render_to_response("qanda/add_question.html", {'form': form}, context_instance = RequestContext(request))
これはHTMLコードです
#add_question.html
<h1> Add Question: {{ user.username }}</h1>
<form action = "" method = "post">{% csrf_token %}
{{ form.as_p }}
<input type = "submit" value = "Ask" />
<input type = "hidden" name = "next" value = "{{ next|escape }}" />
</form>
ビューでは、コメント化された行は、モデルを自動保存するためにビューに追加したものです。質問を追加するとき、URLには関連付けられている映画のIDが含まれています。私の考えでは、そのIDを取得し、ForeignKeyに接続して、質問に関連付けられている映画を識別します。ただし、コードを使用すると、特定の質問の映画の関連付けを変更するだけでなく、すべての質問の映画の関連付けが現在の映画に変更されます。コードがないと、映画と質問はまったく関連付けられません。これを修正するにはどうすればよいですか?