2011-07-17 14 views
11

Próbuję utworzyć stronę systemu inwentaryzacji, która pozwoli użytkownikowi zaktualizować ilość otrzymanych elementów.Próbuję przekazać zestaw kwerendy jako dane początkowe do zestawu

Chcę wyświetlić tabelę wszystkich produktów i pozwolić użytkownikowi na wpisanie odebranej ilości, którą opublikuję i powtórzę, aby zaktualizować bazę danych.

Oto mój widok:

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

Oto mój wzór do postaci:

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

A oto szablon formularza:

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

I tu jest błąd I otrzymuję:

Złapał atrybut AttributeError podczas renderowania: Obiekt "Produkt" nie ma atrybutu "Uzyskaj"

Czy ktoś może mi w tym pomóc?

Odpowiedz

12

Od docs wygląda na to trzeba przejść na liście słowników jak wstępnych danych, zamiast queryset:

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

Możesz zmienić początkowe zapytanie do:

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

, która zwróci listę słowników, a nie obiekty instancji modelu.

Korzystanie wstępne dane z formset: 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

To się udało. Byłem nieświadomy funkcji value(), więc dziękuję bardzo za heads-up. Powrót do pracy ... –

+0

Fajnie, cieszę się, że działało. –

+1

Wielkie dzięki. Wpisałeś jednak błędną funkcję w tym przykładzie. Powinno to brzmieć: 'list_of_active_products = Product.objects.filter (status = 1) .values ​​()' – DMunoz

Powiązane problemy