2016-03-30 7 views
1

Ich habe ein Formular, das Eingabe-Tags enthält, die ausgeblendet sind, wenn ich das Formular an die Ansichten und drucken, sehe ich die Werte, die ich brauche, aber den Inhalt nicht in der Datenbank speichern hier mein html istSpeichern von HTML-Eingabe-Tag zu Django-Modelle

<form method="POST" action="/selly/cart/" item_id="{{product.pk}}" enctype="multipart/form-data"> 
    {% csrf_token %} 
    <h1 name="description">Description is : {{each_item.description}}</h1> 
    <p><input type="hidden" name="description" value="{{each_item.description}}"></p> 

    <span name="price">Price is : $ {{each_item.price}}/piece</span> 
    <p><input type="hidden" name="price" value ="{{each_item.price}}"></p> 

    <p>Quantity is : <input type="number" default="0" name="quantity"> piece ({{each_item.item_remaining}} pieces available)</p> 
    <br> 
    <input type="submit" class="btn btn-primary" value="Add to Cart"> 

</form> 

hier ist mein views.py

from selly.models import Cart 
def cart(request): 
    if request.method == "POST": 
     print "rp ", request.POST 

     description = request.POST['description'] 
     print "Description is ", description 

     price = request.POST['price'] 
     print "Price is ", price 

     quantity = request.POST['quantity'] 
     print "Quantity is ", quantity 

     items = Cart.objects.get_or_create(client="client", description="description", price="price", quantity="quantity") 
     print "ITEMS", items 
    return render(request, 'selly/cart.html', {'items': items}) 

hier wird die model.py

class Cart(models.Model): 
    description = models.CharField(max_length = 100) 
    price = models.DecimalField(max_digits=10, decimal_places=2) 
    quantity = models.IntegerField() 

    def __str__(self): 
     return self.description 

    def total(self): 
     return self.price * self.quantity 

Gibt es eine Möglichkeit, es zu machen in der Datenbank speichern i Wagen genannt erstellt

+0

Rufen Sie einfach speichern Methode: 'items.save()' – Selcuk

+0

@Selcuk erhalten [u "'Preis' Wert muss eine Dezimalzahl sein."] Als Fehler – uche

+0

Welchen Preis Wert geben Sie ein? – v1k45

Antwort

1

Ich bin überrascht Sie einen Fehler nicht mit diesem Code bekommen - get_or_create ein Tupel zurück, pro der Dokumentation:

Gibt ein Tupel von (object, created) zurück, wobei das Objekt das abgerufene oder erstellte Objekt ist und ein boolescher Wert erstellt wird, der angibt, ob ein neues Objekt erstellt wurde.

So Ihre Linie items = Cart.objects.get_or_create(client="client", description="description", price="price", quantity="quantity")

Bedürfnisse sein

items, created = = Cart.objects.get_or_create(client="client", description="description", price="price", quantity="quantity")

Sie werden auch in der Lage sein, die erstellt Variable abzufragen, denn wenn es falsch ist, dann hat es nicht erstellt neues Objekt; Wenn es kein neues Objekt erstellt hat, gibt get_or_create das bereits in der Datenbank vorhandene Objekt zurück.

Sie müssen das Objekt manuell speichern, wenn Sie es aktualisieren.

Dies liegt daran:

Dies als Verknüpfung gemeint Code boilerplatish. Zum Beispiel:

try: 
    obj = Person.objects.get(first_name='John', last_name='Lennon') 
except Person.DoesNotExist: 
    obj = Person(first_name='John', last_name='Lennon', birthday=date(1940, 10, 9)) 
    obj.save() 

Ausführliche Informationen sind auf der docs Seite for get_or_create.

Auch Ihre letzte Zeile falsch ist - Sie Strings auf das Objekt zuweisen, in dem Sie price="price" tun - Sie wollen tatsächlich zu tun Sie price=price, weil Sie o bject.price=price zuweisen, was Sie die Variable im obigen Code genannt haben. Ich würde vorschlagen, diese Variablen vielleicht 'incoming_price' oder ähnlich zu nennen, um Verschattung/Verwirrung zu vermeiden.

Verwandte Themen