Есть ли более чистый способ сохранить объект в БД, чем объявлять реквизиты один за другим, как это:

#django

#django

Вопрос:

Как вам этот код? В html у меня есть поля со свойствами имени, и я ссылаюсь на эти имена здесь. Я только что придумал это сам, не видел подобных примеров.

 def addsupplier(request):
    a = request.POST['companyname']
    b = request.POST['contactname']
    c = request.POST['address']
    d = request.POST['phone']
    e = request.POST['email']
    f = request.POST['country']
    Supplier(companyname = a, contactname = b, address = c, phone = d, email = e, country = f).save()
    return redirect(request.META['HTTP_REFERER'])
  

Комментарии:

1. Знаете ли вы о модельных формах Django ? Есть ли причина не использовать их?

2. Я не знал. Эти ответы помогли мне. У меня нет причин не использовать их. Я думаю, я могу создать несколько форм для get, если я хочу применить фильтрацию с различными условиями, например.

3. Или это вообще для типа get?

Ответ №1:

Более чистый способ — использовать django ModelForms

 from django.forms import ModelForm
from .models import Supplier
class SupplierForm(ModelForm):
    class Meta:
        model = Supplier
        fields = '__all__' #or put the fields you want in list


def addsupplier(request):
    form = SupplierForm(request.POST or None)
    if(form.is_valid()):
        form.save() 
        return redirect(request.META['HTTP_REFERER'])
    else:
        return render(request, 'template', context)