Подтвердить что ты не робот

Django добавляет дополнительное поле в ModelForm, созданный с помощью модели

Мне нужно создать FormSet из модели, но мне нужно вставить "дополнительное значение" в каждую форму.

В частности, у меня есть JApplet, который генерирует некоторые маркеры и пути на изображении, а POST - на сервере.

В моей модели строки состоят из двух маркеров. Но когда я его POST, потому что я использую идентификатор, сгенерированный из JApplet, а не из базы данных, я не буду знать, из чего будет составлен маркер Path.

Итак, я подумал о том, чтобы вставить "временный идентификатор" в маркер в форме и выполнить правильные расположения в представлении перед сохранением пути.

Я думал об определении пользовательской формы для маркеров, но это не кажется очень сухим, и я не хочу возвращаться к этому, если я изменю модель Marker.

Вот форма:

  class PointForm(forms.ModelForm):
    temp_id = forms.IntegerField()
    class Meta:
            model = Point

    def clean(self):
            if any(self.errors):
                    # Don't bother validating the formset unless each form is valid on its own
                    return

            ingresso = self.cleaned_data['ingresso']
            ascensore = self.cleaned_data['ascensore']
            scala = self.cleaned_data['scala']

            if (ingresso and ascensore) or (ingresso and scala) or (ascensore and scala):
                    raise forms.ValidationError("A stair cannot be a elevator or an access!!!") 
            return self

    def save(commit=True):
    # do something with self.cleaned_data['temp_id']
            super(PointForm).save(commit=commit)

И модель:

  class Point(models.Model):

    RFID = models.CharField(max_length=200, blank=True)

    x = models.IntegerField()
    y = models.IntegerField()

    piano = models.ForeignKey(Floor)

    ingresso = models.BooleanField()

Ошибка:

  ViewDoesNotExist at /admin/
  Could not import buildings.views.getFloors. View does not exist in module buildings.views.
  Request Method:   GET
  Request URL:  http://127.0.0.1:8000/admin/
  Django Version:   1.4.1
  Exception Type:   ViewDoesNotExist
  Exception Value:  
  Could not import buildings.views.getFloors. View does not exist in module buildings.views.
  Exception Location:   /usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py in get_callable, line 101

Ошибка возникает, когда я пытаюсь загрузить страницу администрирования, эта страница вообще не имеет ссылок на форму.

РЕШЕНИЕ ДЛЯ ИСКЛЮЧЕНИЯ

Хорошо, я напишу здесь, как узнать, почему Django делает такую ​​странную вещь.

Здесь это правильный способ узнать, в чем проблема.

Исключение было выбрано потому, что я забыл добавить forms.py в from django import forms.

4b9b3361

Ответ 1

Вы можете добавить поле в ModelForm. Если вы не добавите в свою модель поле temp_id, вам не нужно изменять эту форму при изменении модели.

Пример (с моделью с именем Point):

class PointForm (forms.ModelForm):
    temp_id = forms.IntegerField()

    class Meta:
        model = Point

    def save(self, commit=True):
        # do something with self.cleaned_data['temp_id']
        return super(PointForm, self).save(commit=commit)

ОБНОВЛЕНИЕ: Забыл self в def save() и изменил имя модели на Point

Ответ 2

Чтобы ответить на звонок, я должен был напомнить также вернуть последнюю строку, как показано, так что метод get_absolute_url() объекта может быть автоматически вызван представление формы:

return super(PointForm, self).save(commit=commit)