我正在开发一个有两个视图的图像板应用程序。 索引视图和主题视图。
Views.py
def ThreadView(request, thread_id):
template = loader.get_template('thread.html')
form = MessageForm(request.POST)
if request.method == 'POST':
#form = MessageForm(initial={'thread': thread_id})
#form.fields['thread'].initial = thread_id
if form.is_valid():
form.save()
form = MessageForm()
else:
form = MessageForm()
context = {
'message': Thread.objects.get(id=thread_id),
'replies': Message.objects.all().filter(thread=thread_id),
'form':form
}
return HttpResponse(template.render(context, request))
Models.py
class Thread(models.Model):
msg = models.TextField(max_length=9001)
timestamp = models.DateTimeField(auto_now_add=True)
class Message(models.Model):
msg = models.TextField(max_length=9001)
timestamp = models.DateTimeField(auto_now_add=True)
thread = models.ForeignKey('Thread', on_delete=models.CASCADE)
Forms.py
class ThreadForm(forms.ModelForm):
class Meta:
model = Thread
fields = [
'msg'
]
class MessageForm(forms.ModelForm):
class Meta:
model = Message
fields = [
'msg'
]
问题是:消息模型有一个Thread模型的外键,当我发布到某个线程时,我需要在视图中使用thread_id预先填充消息模型中的"线程" -field .py(因为消息必须属于某个线程)。 我注释掉的两行是我尝试将字段值传递给表单,都不成功。
这在基于功能的视图中是否可行? (Python 3,Django 2.0)
对不起,如果我错过了什么,我真的厌倦了整天的编码。如果我没有发布一些重要信息,请随时问我。
答案 0 :(得分:0)
我得到了它的工作。谢谢你的回复!
Views.py:
def ThreadView(request, thread_id):
template = loader.get_template('thread.html')
#form = MessageForm(request.POST or None, initial={'thread': thread_id})
if request.method == 'POST':
form = MessageForm(request.POST or None, initial={'thread': thread_id})
if form.is_valid():
instance = form.save(commit=False)
instance.thread_id=thread_id
instance.save()
return redirect(ThreadView, thread_id)
else:
form = MessageForm(request.POST or None, initial={'thread': thread_id})
context = {
'message': Thread.objects.get(id=thread_id),
'replies': Message.objects.all().filter(thread=thread_id),
'thread_id': thread_id,
'form':form
}
return HttpResponse(template.render(context, request))