我有一个Django应用程序,它基本上是一个列表应用程序,用于跟踪用户正在申请的作业。用户有应用程序和应用程序有问题,如果他们接受采访,用户想要问面试官。所以我在模型'Application'和'Question'之间建立了多对多关系,称为'Ask'。 Models.py:
class Application(models.Model):
status_choices = (
('NS','Not Started'),
('IP','In Progress'),
('OH','On Hold'),
('CO','Complete'),
)
app_status = models.CharField(max_length=2,choices=status_choices)
position = models.CharField(max_length=255)
company = models.ForeignKey(Company)
applied_date = models.DateField(null=True)
isDeleted = models.BooleanField(default=False, blank=True)
user = models.ForeignKey(User)
def __str__(self):
return self.position
class Questions(models.Model):
question = models.CharField(max_length=255)
category = models.CharField(max_length=25)
isDeleted = models.BooleanField(default=False, blank=True)
class Ask(models.Model): #joining table
question = models.ForeignKey(Questions)
app = models.ForeignKey(Application)
isDeleted = models.BooleanField(default=False, blank=True)
因此,想法是用户创建问题列表,然后当他们接受采访时,他们通过查看问题列表并通过模板将其分配给应用程序来为此做准备。 Questions.html:
{% extends 'base.html' %}
{% block body %}
<h1> Questions </h1>
<div class="table-responsive" align="center">
<table class="table-hover" width="75%">
<tr>
<th> Category </th>
<th> Question </th>
<th> <a href="{% url 'JQ:create_question' %}" class="btn btn-success"> Create Question</a></th>
<form method="POST">
{% csrf_token %}
<input type="text" name="app" value="{{ request.META.HTTP_REFERER }}">
<th><input type='submit' value='Add Selected'></th>
</tr>
{% for item in query %}
<tr>
<td> {{ item.category }} </td>
<td> {{ item.question }} </td>
<td> <input type="checkbox" name="selected_q" value="{{ item.id }}"></td>
<td> <a href="{% url 'JQ:delete_question' item.id %}"> Delete </a> </td>
<td> <a href="{% url 'JQ:edit_question' item.id %}"> Edit </a> </td>
</tr>
</form>
{% endfor %}
</table>
</div>
{% endblock %}
从views.py:
调用class QuestionView(TemplateView):
template_name = 'question.html'
def get(self, request):
query = Questions.objects.all().order_by('category')
args = {'query': query}
return render(request, self.template_name, args)
def post(self, request):
id_list = request.POST.getlist('selected_q')
return_url = request.POST.get('app')
app = int(return_url.rsplit('/')[-1])
myApp = Application.objects.get(pk=app)
if id_list != None:
for item in id_list:
myQuestion = Questions.objects.get(pk=int(item))
Ask.objects.create(app=myApp,question=myQuestion)
return HttpResponseRedirect(return_url)
else:
query = Questions.objects.all().order_by('category')
args = {'query': query}
return render(request, self.template_name, args)
用户只能通过浏览应用程序视图进入问题页面,当发生这种情况时,Questions.html会捕获用户来自的链接。然后,用户通过questions.html上的复选框选择一个或多个问题,该复选框在帖子中被捕获为id_list - 所以这应该为我提供创建Ask实例所需的两个键。
然而,当尝试这样做时,它看起来一切正常,但没有创建Ask的实例,我没有收到任何错误消息。我试过从python shell创建一个记录,它工作得很好。我还尝试过其他方法,例如使用表单并实例化Ask之后调用.save(),但它不会插入记录。为了测试,我在views.py中取出了查询来检查以确保有效值传递给myApp和myQuestion,所以我相信数据全部存在并且准确,但是由于某种原因它没有创建记录
我感谢您提供的任何帮助,或者可能只是关于如何调试此问题的不同想法,以便我可以收到一些错误消息。
答案 0 :(得分:0)
Blurb是对的 - 将表格包装在表格标签中解决了这个问题。谢谢!