使用formset时出现IndentationError

时间:2011-10-24 11:12:28

标签: python django

我有这些模特:

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)   

我想设计一个表单,以相同的形式为该巡演添加一个巡演和一组图像。 这是我的FormModel:

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 个答案:

答案 0 :(得分:3)

也许你在那一行(或相反的地方)放置空格而不是标签,有时我会碰到

答案 1 :(得分:3)

很有可能,您的缩进在第122行中有所不同,很可能是因为您在前导空格中存在不可见的差异。

示例:块中有许多行,所有行都以选项卡开头,编辑器将其显示为... 8个空格。其中一行(第122行)包含一个空格和一个制表符作为前导空格,由编辑器显示为... 8个空格。你没有看到差异,然而,Python的行开始是不同的,这就是问题所在。

建议:从第122行删除所有前导空格,然后使用您的编辑器自动添加它以获得一致的结果。或者从第122行删除所有前导空格,并使用与块的其余部分相同的开头。

要验证是这种情况,请使用ViM打开文件,然后键入:set list(所有字符)。现在,TAB将显示为^I,而空格将显示为单个空格字符。

答案 2 :(得分:1)

python第122行中的

是:

if form.is_valid():

答案 3 :(得分:1)

最常见的错误来源(例如此错误)是前一种方法中的缩进更改,或者通常向上报告实际错误的几行最最问题的常见来源是从网络中复制+粘贴某些内容,这些内容可以是标签/间距,也可以比您正在做的更多/更少缩进。

你的编辑应该警告你这样的事情。例如,Komodo IDE提供了指示缩进级别的箭头。所以将它加载到一个花哨的编辑器中,然后用它来发现问题。有一篇关于python IDE的帖子。