Мне нужно увидеть полный код вашей формы, чтобы действительно ответить на этот вопрос (можете ли вы включить его?), Но вот несколько начальных мыслей:
Является ли FriendForm
подклассом django.forms.ModelForm
?Если это так, нет необходимости переопределять метод save
- тем более что все, что вы здесь делаете, - это получение возвращенного нового объекта, сохранение его (снова) и его возврат (снова) - дополнительная обработка без каких-либо дополнительных преимуществ.
Если FriendForm
не является подклассом ModelForm
, как оно связано с данными базы данных?От какого класса оно наследуется?
ОБНОВЛЕНИЕ:
ModelForms
не связаны напрямую с базой данных - они представляют собой ярлык для создания форм HTML для взаимодействия с моделями базы данных - то есть классаминаследование от django.models.Model
.Вы делаете это, создавая Meta
класс внутри вашего ModelForm
.
С ModelForm
вам не нужно вручную указывать поля (django делает это автоматически), если вы не хотитепереопределить конкретные поведения.Вы do должны указать django, какую модель базы данных вы хотите использовать.Если вы уже определили базу данных Model
, используйте ее;если нет, попробуйте это:
# in models.py
from django import models
class Friend(models.Model):
first_name = models.CharField( "see <http://docs.djangoproject.com/en/dev/ref/models/fields/> to adjust your syntax" )
... your other fields ...
# in forms.py
from django.forms import ModelForm
from my_project.my_app.models import Friend
class FriendForm(ModelForm):
class Meta:
model = Friend
Вот и все!Теперь ваш FriendForm
должен работать правильно.См. http://docs.djangoproject.com/en/dev/topics/forms/modelforms/ для получения дополнительной информации об использовании ModelForm
s.
В качестве альтернативы вам вообще не нужно использовать ModelForm
.Вы можете добавить следующий save
метод к существующему FriendForm
:
def save(self):
if self.is_valid():
from myproject.myapp.models import Friend
new_friend = Friend(**self.cleaned_data)
new_friend.save()
return new_friend
... суть здесь в том, что вы импортируете модель Friend
, которая инкапсулирует поведение хранилища базы данных.Это в основном то, что ModelForm
создает автоматически для вас, но не так надежно - поэтому я рекомендую использовать ModelForm
.