Ответ 1
Вы также можете использовать аргумент queryset. Это должно работать:
formset = ShipmentFormSet (queryset = list_of_active_products)
ср. https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#changing-the-queryset
Я пытаюсь создать страницу для системы инвентаризации, которая позволит пользователю обновлять количество полученных элементов.
Я хочу показать таблицу всех продуктов и дать пользователю ввести полученное количество, которое я опубликую и перейду для обновления базы данных.
Вот мой взгляд:
def new_shipment(request):
list_of_active_products = Product.objects.filter(status=1)
ShipmentFormSet = formset_factory(ShipmentForm, extra=0)
formset = ShipmentFormSet(initial=list_of_active_products)
return render_to_response('inventory/new_shipment.html', {'formset': formset})
Здесь моя модель для формы:
class ShipmentForm(forms.Form):
sku = forms.IntegerField()
product_name = forms.CharField(max_length=100)
quantity = forms.IntegerField()
И вот шаблон формы:
<form method="post" action="">
<table>
{% for form in formset %}
{{ form }}
{% endfor %}
</table>
<input type="submit" />
</form>
И вот ошибка, которую я получаю:
Caught AttributeError при рендеринге: объект "Продукт" не имеет атрибута "get"
Может ли кто-нибудь помочь мне с этим?
Вы также можете использовать аргумент queryset. Это должно работать:
formset = ShipmentFormSet (queryset = list_of_active_products)
ср. https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#changing-the-queryset
Из документов, похоже, вы должны передать список словарей в качестве исходных данных, а не QuerySet:
Also note that we are passing in a list of dictionaries as the initial data.
Вы можете изменить свой первоначальный запрос на:
list_of_active_products = Product.objects.filter(status=1).values()
который вернет список словарей, а не объектов экземпляра модели.
Использование исходных данных с помощью набора форм: https://docs.djangoproject.com/en/dev/topics/forms/formsets/#using-initial-data-with-a-formset
ValuesQuerySet: https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.values