Прежде всего, вам нужно знать, когда вы создаете форму, это, вероятно, означает, что вы передадите ей данные.
form = MovieForm() # initialize the form
Вы должны знать, что эта форма была создана с помощью модели,так что MovieForm
был сам класс модели, для создания экземпляра вам просто нужно добавить данные, которые приходят из шаблона через request.POST
form = MovieForm(request.POST) # or MovieForm(data=request.POST)
Мы находимся в процессе созданиянапример, но до этого мы не можем допустить какие-либо значения от пользователя, поэтому появляется form.is_valid()
:
if request.POST:
form = MovieForm(request.POST) # or MovieForm(data=request.POST)
if form.is_valid():
''' '''
Как только форма верна, мы можем получить все значения из request.POST
как request.POST['price']
.Это будет работать, но это не рекомендуется, извлекать данные из form.cleaned_data
лучше и безопаснее, потому что Django преобразует любой объект в тип объекта, предоставленный в форме.Например: если у вас была форма, содержащая BooleanField()
, в шаблоне будет сгенерировано Checkbox
.Теперь после отправки request.POST.get('bool_field_name')
вернет "True"
или "False"
как string
.тогда как Django настроит все для вас, и вы получите логическое значение, как и хотели.Итак, у нас есть:
if request.POST:
form = MovieForm(request.POST) # or MovieForm(data=request.POST)
if form.is_valid():
genre = form.cleaned_data.get('genre')
''' rest of the code '''
Поскольку ваша форма построена с ModelForm
, вам не нужно извлекать данные из cleaned_data
, Django упрощает процесс.Вам просто нужно сохранить форму, и Django автоматически создаст экземпляр.
if request.POST:
form = MovieForm(request.POST) # or MovieForm(data=request.POST)
if form.is_valid():
instance = form.save()
# instance = form.save(commit=False) | will not save the instance
# commit = False | in case you want to do something else before saving
# By using commit = False, if you have m2mfield
# You need to call save_m2m() - required if you use commit False.
Примечание * Переменная instance
является экземпляром модели, переданной в классе Meta
из вашей формы.
class MovieForm(forms.ModelForm):
class Meta:
model = Movie
fields = ['genre', 'price', 'flag']
Для дальнейших объяснений, пожалуйста, обратитесь к Официальной документации