2011-07-17 19 views
11

Estoy tratando de crear una página para un sistema de inventario que permita a un usuario actualizar una cantidad de elementos recibidos.Intentar pasar un QuerySet como datos iniciales a un formset

Quiero mostrar una tabla de todos los productos y dejar que el usuario ingrese la cantidad recibida, la cual publicaré e iteraré para actualizar la base de datos.

Aquí es mi punto de vista:

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}) 

Aquí es mi modelo de la forma:

class ShipmentForm(forms.Form): 
    sku = forms.IntegerField() 
    product_name = forms.CharField(max_length=100) 
    quantity = forms.IntegerField() 

Y aquí es la plantilla de formulario:

<form method="post" action=""> 
    <table> 
     {% for form in formset %} 
    {{ form }} 
    {% endfor %} 
    </table>  
    <input type="submit" /> 
</form> 

Y aquí es el error que Estoy obteniendo:

Capturado AttributeError durante la representación: el objeto 'Producto' no tiene ningún atributo 'obtener'

¿Alguien puede ayudarme con esto?

Respuesta

12

A partir de los documentos parece que usted tiene que pasar en una lista de diccionarios como los datos iniciales, en lugar de un QuerySet:

Also note that we are passing in a list of dictionaries as the initial data.

Es posible que desee cambiar la consulta inicial a:

list_of_active_products = Product.objects.filter(status=1).values() 

que devolverá una lista de diccionarios en lugar de objetos de instancia de modelo.

Utilizando los datos iniciales con un juego de formularios: 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

+2

Eso lo hizo. No estaba al tanto de la función de valores(), así que muchas gracias por el aviso. De vuelta al trabajo ... –

+0

Genial, me alegro de que haya funcionado. –

+1

Muchas gracias. Sin embargo, escribiste mal la función en el ejemplo. Debería decir 'list_of_active_products = Product.objects.filter (status = 1) .values ​​()' – DMunoz

Cuestiones relacionadas