Django добавить дополнительное поле в ModelForm, созданный из модели
Я должен создать FormSet из модели, но мне нужно вставить "дополнительное значение" в каждую форму.
в частности, у меня есть JApplet, который генерирует некоторые маркеры и пути на изображении и публикует его на сервере.
в моей модели линии состоят из двух маркеров. Но когда я опубликую его, потому что я использую id, созданный из JApplet, а не из базы данных, я не буду знать, из каких маркеров будет составлен путь.
поэтому я подумал вставьте "временный идентификатор" в Маркер формы и выполните правильные действия в представлении перед сохранением пути.
Я думал об определении пользовательской формы для маркеров, но она не кажется очень сухой, и я не хочу возвращаться к этому, если я изменю модель маркера.
вот форма:
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
ошибка генерируется при попытке загрузить страницу администратора, это на странице вообще нет ссылок на форму.
РЕШЕНИЕ ДЛЯ ИСКЛЮЧЕНИЯ
хорошо, я напишу здесь, как узнать, почему Джанго делал такую странную вещь.
здесь это правильный способ узнать, в чем проблема.
исключение было брошено, потому что я забыл добавить forms.py
до from django import forms
.
2 ответов
вы можете добавить поле в 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)
обновление: забыл себя в def save () и изменил modelname на Point
чтобы следовать ответу релеканга, мне нужно было напомнить также возвращение последняя строка, как показано, так что метод get_absolute_url() объекта может быть автоматически вызван при отправке формы:
return super(PointForm, self).save(commit=commit)