Создание и обновление формы модели Django

У меня есть модель формы под названием Record Category, которая имеет только поле name на моих 2 страницах 1.record_category/create/ 2.record_category/update/ как я могу написать свой formview для обновления и создания?

models.py

class RecordsCategory(models.Model):
    name = models.CharField(max_length=255, blank=True)

views.py

 class RecordCategoryView(FormView):
     ?

Используйте django generic UpdateView и CreateView.

views.py

class RecordCategoryCreateView(CreateView):
    model = RecordsCategory
    fields = ['field name']

повторите то же самое с UpdateView, убедившись, что вы сделали правильные изменения по пути.

Что ж, давайте рассмотрим сценарий, в котором мы создаем RecordsCategory и обновляем/редактируем RecordsCategory используя формы Django.

Предположим, что у вас есть определенная модель следующего вида:

class RecordsCategory(models.Model):
    name = models.CharField(max_length=255, blank=True)

Теперь добавим формы:

class RecordsCategoryForm(forms.ModelForm):
    class Meta:
        model = RecordsCategory
        fields = '__all__'


    def save(self):
        record_category = super(RecordsCategoryForm, self).save(commit=False)
        record_category.save()
        return record_category

Если вы обратите внимание на метод сохранения, мы сначала пытаемся получить объект категории записи без сохранения его в БД (через commit=False). Это делается для того, чтобы убедиться, что приложение не вызовет ошибку IntegrityError (что означает, что мы пытаемся сохранить в БД без ввода/заполнения обязательных полей). Затем мы сохраняем его в базу данных.

Добавим представления для create new record category:

from django.views.generic import FormView

class NewRecordsCategoryView(FormView):
    template_name = "blob/blob.html"
    form_class = RecordsCategoryForm

    def form_valid(self, form):
        form.save()
        return super(NewRecordCategoryView, self).form_valid(form)

    def get_success_url(self, *args, **kwargs):
        return reverse("some url name")

Мы переопределили form_valid метод NewRecordsCategoryView в save() метод, который мы переопределили выше. В частности, поскольку мы не можем получить доступ к объектам запроса в моделях/формах, нам нужно передать метод save() (мы также можем передать метод __init__ формы, это другой способ).

Теперь добавим еще одно представление для обновления объекта категории записей:


class EditRecordsCategoryView(UpdateView) #Note that we are using UpdateView and not FormView
    model = RecordsCategory
    form_class = RecordsCategoryForm
    template_name = "blob/blob.html"

    def form_valid(self, form): # here you should be redirected to the id which you want to change it.
        form.save()
        return super(EditRecordsCategoryView, self).form_valid(form)

    def get_success_url(self, *args, **kwargs):
        return reverse("some url name")

И с этими ссылками:

    ...
    path('record_category/create/', NewUserProfileView.as_view(), name="new-user-profile"),
    path('record_category/(?P<pk>\d+)/update/', EditUserProfileView.as_view(), name="edit-user-profile"),
    ...

И основной шаблон Django, чтобы заставить вышеупомянутые формы работать:

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}

  <input type=submit value="submit" />
</form>

Ссылки:

Вернуться на верх