我不太确定如何标题这个问题,但我正在尝试用Django开发一个简单的webapp。我要做的是用户将手动标记每个图像,每个标记将具有特定图像的外键(但每个图像可以有多个标记)。索引页面应该显示实际图像,但我还没想出来......
问题是,我不确定如何实现它,因此对于每个页面,索引页面将显示图片和图片标签的框。用户提交后,它将转到下一个标记数量最少的未标记图像/图像。现在,用户可以提交标签(并且数据写入正确),但它仍然保留在同一图像上。我是Python / Django noob,请原谅我:P
以下是相关的源代码:
forms.py:
class InputForm(forms.ModelForm):
image = forms.ModelChoiceField(queryset=Image.objects.all(),
widget=forms.HiddenInput())
class Meta:
model = Tag
models.py:
class Image(models.Model):
image_location = models.CharField(max_length=200)
num_tags = models.IntegerField(default=0)
image_score = models.FloatField()
def __unicode__(self):
return u'%d' % self.id
class Tag(models.Model):
image = models.ForeignKey(Image)
tag_text = models.CharField(max_length=200, blank=True)
def __unicode__(self):
return self.tag_text
views.py:
def index(request):
if request.method == 'POST':
return HttpResponse(request.POST['image'])
image = Image.objects.all()[0]
form = InputForm(initial={'image': image})
return render_to_response('imageSite/index.html',
{
'form':form,
},
context_instance=RequestContext(request))
def submit(request):
form = InputForm(request.POST)
if(form.is_valid()):
image = form.cleaned_data['image'];
image.num_tags = image.num_tags + 1
image.save()
model = form.save()
model.save()
return redirect(index)
的index.html:
<ul>
<form action="/imageSite/submit/" method="post">
{%csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit" />
</form>
</ul>
答案 0 :(得分:1)
代码return redirect(index)
不起作用。您需要返回一个重定向响应,其中包含应重定向的正确URL。例如:
redirect_url = '/images/45/'
return HttpResponseRedirect(redirect_url)
有关完整示例,请参阅Django文档中的this example。请注意,需要在视图中计算redirect_url
的值:您需要使用最少数量的标记计算Image
对象,并使用Django的reverse
来干净地计算URL该Image
个对象。如果表单无效,则不应执行重定向。