所以我構建了一個基本的Q &一個網站 - 每個主題都有一系列與其相關的問題,每個問題都有多個相關的答案。爲Django模型自動填充外鍵
我正在創建用戶輸入的問題,他們必須與一個主題相關聯。這是模型
#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')
這就是URL的conf
#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中以確定哪個電影與該問題相關聯。但是,當我使用我的代碼時,它會將所有問題的電影關聯更改爲當前電影,而不僅僅是更改特定問題的電影關聯。如果沒有代碼,它根本不會將電影與問題關聯起來。我該如何解決?
真棒。完美地工作。非常感謝!還有一個 - 我如何將用戶重定向回前一個URL?我可以向HttpResponseRedirect(「home /(?P \ d +)/」)中添加一個變量,或者有更好的方法嗎? –
您應該避免在視圖中使用絕對URL。我正在編輯答案以顯示應該如何完成根據我 – Konstant
非常感謝,感謝幫助。 –