Skip to main content
 首页 » 编程设计

python之Django ModelForm 在提交后获取列表中的下一项

2025年05月04日35zhenyulu

我不太确定如何给这个问题起标题,但我正在尝试使用 Django 开发一个简单的网络应用程序。我想要做的是用户将手动标记每个图像,每个标记将有一个特定图像的外键(但每个图像可以有多个标记)。索引页应该显示实际图像,但我还没有弄清楚...

问题是,我不确定如何为每个页面实现它,索引页面将显示一张图片和一个图像标记框。用户提交后,会转到下一张未标记的图片/标签数最少的图片。现在,用户可以提交一个标签(并且数据写入正确),但它仍然停留在同一张图片上。我是 Python/Django 菜鸟,所以请原谅我 :P

相关源码如下:

表单.py:

class InputForm(forms.ModelForm): 
image = forms.ModelChoiceField(queryset=Image.objects.all(), 
    widget=forms.HiddenInput()) 
 
class Meta: 
    model = Tag  

模型.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> 

请您参考如下方法:

代码 return redirect(index) 将不起作用。您需要返回一个重定向响应,其中包含它应该重定向到的正确 URL。例如:

redirect_url = '/images/45/' 
return HttpResponseRedirect(redirect_url) 

参见 this example在 Django 文档中有一个完整的例子。请注意,redirect_url 的值需要在您的 View 中计算:您需要计算标签数量最少的 Image 对象并使用 Django 的 reverse干净地计算该 Image 对象的 URL。如果表单无效,则不应执行重定向。