Skip to main content
 首页 » 编程设计

python之使用 formset 时出现缩进错误

2025年05月04日11thcjp

我有这些模型:

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 行的代码每次都在变化!!! 它出什么问题了?!!! 提前致谢

请您参考如下方法:

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

示例:您在一个 block 中有很多行,所有行都以制表符开头,您的编辑器将其显示为 ... 8 个空格。其中一行(第 122 行)包含一个空格和一个制表符作为前导空格,您的编辑器将其显示为 ... 8 个空格。您看不出区别,但是 Python 的行首不同,这就是问题所在。

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

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