Попытка передать QuerySet в качестве начальных данных в набор форм - PullRequest
12 голосов
/ 17 июля 2011

Я пытаюсь создать страницу для системы инвентаризации, которая позволит пользователю обновлять количество полученных предметов.

Я хочу показать таблицу всех продуктов и позволить пользователю ввести полученное количество, которое я опубликую и повторю для обновления базы данных.

Вот мой взгляд:

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 при рендеринге: у объекта 'Product' нет атрибута 'get'

Может кто-нибудь помочь мне с этим?

Ответы [ 2 ]

13 голосов
/ 22 декабря 2012

Вы также можете использовать аргумент queryset. Это должно работать:

formset = ShipmentFormSet (queryset = list_of_active_products)

ср. https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#changing-the-queryset

12 голосов
/ 17 июля 2011

Из документов похоже, что вы должны передать список словарей в качестве исходных данных, а не 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

...