Питон Django, устанавливающий начальные значения динамически, чтобы сформировать - PullRequest
0 голосов
/ 17 октября 2019

Я создаю небольшой веб-сервис для управления запасами. В рамках этого я хочу заполнить детальный вид любого инвентаря. Вот что у меня есть для этого:

class Product_Update(forms.Form):
    Product_Code = forms.CharField(
        max_length=10,
        attrs={"placeholder = <ID here> Readonly = True"
    )
    Name = forms.CharField(max_length=100)
    Description = forms.Textarea(attrs={"Rows": 3})
    price = forms.DecimalField()
    mini = forms.IntegerField()
    Max = forms.IntegerField()

Как мне передать параметры формы?

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Вместо этого следует использовать ModelForm:

class ProductUpdate(forms.Form):

    class Meta:
        model = Product
        fields = ('product_code', 'name', 'description', 'price', 'mini', 'max')

Теперь вы можете легко передать экземпляр модели в форму:

def some_view(request):
    instance = Product.objects.first()
    form = ProductUpdate(request.POST or None, instance=instance)
    context = {'form':form}
    return render(request, 'some_template.html', context)

Если выЧтобы отобразить несколько продуктов в одной форме, вам нужно будет использовать modelformset_factory:

from django import forms

ProductFormSet = forms.modelformset_factory(Product, form=ProductUpdate, extra=0)

Теперь в файле views.py вы можете передать QuerySet вашемуФорма:

def some_view(request):
    queryset = Product.objects.all()
    form = ProductFormSet(request.POST or None, queryset=queryset)
    if request.method == 'POST' and form.is_valid():
        form.save()
    context = {'form':form}
    return render(request, 'some_template.html', context)
0 голосов
/ 17 октября 2019

Вы можете получить доступ к данным формы в представлении, обратившись к запросу. POST

def actionView(request, product_id):
   product = Product.objects.get(id=product_id)
   form = ProductUpdate(request.POST, instance=product_id)
   form.save(commit=False) #Do this if you want to make changes to some value
   form.price = 112233
   updated_form = form.save()

...