使用表单集时出现缩进错误

1 投票
4 回答
563 浏览
提问于 2025-04-17 04:53

我有这些模型:

class Tour(models.Model):
   Name=models.CharField(max_length=100)
   Count=models.SmallIntegerField() 
   PriceUnitCode=models.ForeignKey(PriceUnit)
   Price=models.CharField(max_length=12)
   Description=models.TextField()
   ActionDate=models.DateTimeField(auto_now=True,editable=False)
   ActionUserCode=models.ForeignKey(User,editable=False)
   StatusTypeCode=models.ForeignKey(StatusType)

class Images(models.Model):
   Image = models.ImageField(upload_to="gallery")
   Tour=models.ForeignKey(Tour)   

我想设计一个表单,用来添加一个旅游项目和一组与这个旅游项目相关的图片,想把它们放在同一个表单里。

这是我的表单模型:

class TourForm(ModelForm):
   class Meta:
       model = Tour

我在views.py里这样做:

def myview(request,key):  
    GalleryFormSet = inlineformset_factory(Tour,Images)   
    if request.method == 'POST':        
        form = TourForm(request.POST, request.FILES)
        if form.is_valid():
            tour=form.save()
            formset=GalleryFormSet(request.POST, request.FILES,instance=tour)
            if formset.is_valid():
                formset.save()
    else:
        form = TourForm()
        formset=GalleryFormSet()
    return render_to_response('airAgency/addtour.html', {'form': form,'formset':formset})

在我的模板里:

<form method='POST' enctype="multipart/form-data" dir="rtl">
    {% csrf_token %}
    {{ form.as_p }}
    {{ formset.management_form }}
    {% for form in formset %}
        {{ form }}
    {% endfor %}
    <input type="submit" />
</form>   

但是出现了这个错误:

unexpected indent (views.py, line 122) 

第122行是这个:

if(form.is_valid()):

当然我改了很多次这个代码,但每次在第122行都会出错,而第122行的代码每次都不一样!!!到底是怎么回事呢?!!!谢谢大家的帮助。

4 个回答

1

这种错误最常见的原因是前面的方法缩进发生了变化,或者说是在实际错误报告的几行之前。最最常见的问题来源是从网上复制粘贴的内容,这些内容的缩进可能和你写的代码不一样,要么是用制表符,要么是用空格,或者缩进的多了少了。

你的编辑器应该会提醒你这些问题。例如,Komodo IDE会用箭头来指示缩进级别。所以,建议你把代码放到一个好一点的编辑器里,这样可以更容易找到问题。还有一个关于Python IDE的StackOverflow帖子。

3

也许你在那一行用了空格而不是制表符(或者反过来),我有时候也会遇到这种情况。

3

很可能,你的第122行的缩进有问题,最可能的原因是你在开头的空白字符上有看不见的差异。

举个例子:你有很多行代码在一个代码块里,都是用制表符(Tab)开头的,编辑器显示为……8个空格。其中有一行(第122行)开头用了一个空格和一个制表符,这在编辑器里也显示为……8个空格。你看不出有什么不同,但在Python里,这行的开头是不同的,这就是问题所在。

建议:把第122行开头的所有空白去掉,然后用编辑器的自动缩进功能来保持一致。或者把第122行的所有开头空白去掉,和其他行保持一样的开头。

要确认是不是这个问题,可以用ViM打开你的文件,然后输入 :set list(显示所有字符)。这样,制表符会显示为 ^I,而空格则会显示为一个空格字符。

撰写回答