IndentationError при использовании formset - PullRequest
1 голос
/ 24 октября 2011

У меня есть эти модели:

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 ]

3 голосов
/ 24 октября 2011

Весьма вероятно, что отступ в строке 122 отличается, скорее всего потому, что у вас есть невидимые различия в начальных пробелах.

Пример: У вас много строк в блоке, все начинаются свкладка, которая отображается вашим редактором как ... 8 пробелов.Одна из строк (строка 122) содержит пробел и табуляцию в качестве начальных пробелов, которые отображаются вашим редактором как ... 8 пробелов.Вы не видите разницы, но начало строки для Python другое, и в этом проблема.

Совет: Удалите все начальные пробелы из строки 122, а затем автоматически сделайте отступ с помощьюредактор, чтобы получить последовательные результаты.Или удалите все начальные пробелы из строки 122 и используйте то же начало, что и для остальной части блока.

Чтобы убедиться в этом, откройте файл с помощью ViM и введите :set list (все символы).Теперь TAB будет отображаться как ^I, а пробел будет отображаться как один пробел.

3 голосов
/ 24 октября 2011

может быть, вы ставите пробелы вместо табуляции в этой строке (или напротив), это иногда случается со мной

1 голос
/ 25 октября 2011

Наиболее распространенным источником ошибок, таких как эта, является изменение отступа в предыдущем методе или, как правило, на несколько строк от того места, где сообщается фактическая ошибка . Самым распространенным общим источником проблемы является копирование + вставка чего-либо из сетей, которое либо с вкладками / разнесенными, либо с отступом больше / меньше того, что вы делаете.

Ваш редактор должен предупреждать вас о подобных вещах. Например, в Komodo IDE есть стрелки, указывающие уровень отступа. Так что загрузите его в модный редактор и используйте его, чтобы определить проблему. Есть ТАК сообщение о Python IDE.

1 голос
/ 24 октября 2011

в строке Python 122:

if form.is_valid():
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...