2016-03-30 15 views
1

Formu girişlere POST ettiğimde ve yazdırdığımda, girdiğim değerleri görüyorum ancak içeriğin veritabanı veritabanına kaydedilmediğini gördüğüm giriş etiketlerini içeren bir form var. benim html buradadjango modellerine html giriş etiketini kaydetme

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

olan 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 
benim views.py İşte

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

olduğu

bu i sepeti denilen oluşturulan veritabanına kaydetmek yapmanın bir yolu var mı

+0

Kaydetme yöntemini ara: 'items.save()' – Selcuk

+0

@Selcuk am [u "fiyat 'değeri bir ondalık sayı olmalıdır."] Olarak hata – uche

+0

Hangi fiyat değerini giriyorsunuz? – v1k45

cevap

1

Bunu koduyla bir hata almıyorsanız şaşırdım - get_or_create bir demet döndürür docs başına:

nesne alınabilir veya yeni amacı ile oluşturulmuş olup olmadığını belirten bir boolean nesnesi oluşturulur ve oluşturulan olduğu (hazırlandı nesnenin), bir başlığın döndürür.

Yani çizgi items = Cart.objects.get_or_create(client="client", description="description", price="price", quantity="quantity")

ihtiyaçları yanlış ise, o zaman oluşturmadı çünkü aynı zamanda, o yaratılan değişkeni sorgulamak mümkün olacak

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

olmak için yeni nesne; yeni bir nesne oluşturmadıysa, o zaman get_or_create öğesinin tamamı, zaten veritabanındaki nesneyi döndürmektir.

Sen bunu güncelliyorsanız elle nesneyi kaydetmek gerekir.

Bu kod boilerplatish kısayol olarak kastedilmektedir çünkü:

Bu

olduğunu. Örneğin:

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

Tüm ayrıntılar docs sayfasında Ayrıca for get_or_create.

Hangi, son satırı yanlıştır - Size price="price" yapmak nesne Dizeleri atıyorsanız - aslında istiyorum price=price yapın, çünkü o bject.price=price'u ataıyorsunuz. Bu, yukarıdaki kodda değişken olarak adlandırdığınız şeydir. Gölgelendirme/karışıklıktan kaçınmak için bu değişkenlerin 'incoming_price' veya benzerlerini çağırmasını öneririm.