gpt4 book ai didi

python - 无法分配查询集,必须是一个实例

转载 作者:太空宇宙 更新时间:2023-11-04 00:02:40 25 4
gpt4 key购买 nike

我收到此值错误:

ValueError at /shop/items/buy/now/ Cannot assign "QuerySet Product: mcloth2, Product: watch, Product: Watch":
"Buyer.product" must be a "Product" instance.
Request Method: POST Request URL: http://127.0.0.1:8004/shop/items/buy/now/ Django Version: 2.1.5 Exception Type: ValueError Exception Value:
Cannot assign ", , ]>": "Buyer.product" must be a "Product" instance.

buyer.product = 产品

views.py

    def items_buy_now(request):
if not request.user.is_authenticated:
messages.info(request, 'You have to logged in first.')
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
sess = request.session.get("data", {"items": []})
product = Product.objects.filter(active=True, slug__in=sess["items"])
if request.method == "POST":
form = BuyerDeliveryForm(request.POST)
if form.is_valid():
buyer = form.save(commit=False)
buyer.product = product
buyer.save()
return redirect('shop:payment')
else:
form = BuyerDeliveryForm()
return render(request, 'shop/delivery_form.html', {'form': form})



def cart(request,slug):
product = Product.objects.get(slug=slug)
initial = {"items":[],"price":0.0,"count":0}
session = request.session.get('data',initial)
if slug in session['items']:
messages.error(request,'Already added.')
else:
session["items"].append(slug)
session["price"] += float(product.price)
if product.shipping_fee:
session['price'] += float(product.shipping_fee)
session["count"] += 1
request.session["data"] = session
messages.success(request,'Added to Cart.')
return redirect('shop:detail',slug)


def mycart(request):
sess = request.session.get("data", {"items": []})
products = Product.objects.filter(active=True, slug__in=sess["items"])
if not products:
return render(request,'shop/empty_cart.html')
context = {"products": products,
"categories": categories}
return render(request,'shop/cart_item.html',context)

models.py

class Buyer(models.Model):
full_name = models.CharField(max_length=250)
phone = models.CharField(max_length=20)
city = models.CharField(max_length=250,choices=city_choices)
address = models.CharField(max_length=250,default="123Area , House#123 , Street#123")
product = models.ForeignKey(Product,on_delete=CASCADE)

def __str__(self):
return self.full_name




class Product(models.Model):
name = models.CharField(max_length=250)
image = models.ImageField(upload_to='products')
seller = models.ForeignKey(User,on_delete=CASCADE)
slug = AutoSlugField(populate_from='name')
category = models.ForeignKey(Category,on_delete=CASCADE)
description = models.TextField(blank=True,default="Description Field")
brand = models.CharField(max_length=250)
quantity = models.PositiveIntegerField(default=1)
price = models.DecimalField(max_digits=10,default=0.0,decimal_places=2)
shipping_fee = models.DecimalField(max_digits=10,default=0.0,decimal_places=2)
featured = models.BooleanField(default=False)
active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)

def __str__(self):
return self.name

forms.py

    class SellProductForm(forms.ModelForm):
class Meta:
model = Product
fields = ['name','image','category', 'description', 'brand', 'quantity', 'price', 'shipping_fee']


class BuyerDeliveryForm(forms.ModelForm):
class Meta:
model = Buyer
fields = ['full_name','phone','city','address']

urls.py`

  path('items/buy/now/',views.items_buy_now,name='items_buy_now'),
path('mycart/', views.mycart, name='mycart'),
path('<slug>/cart/', views.cart, name='cart'),

`

templates

 {% extends "shop/base.html" %}
{% load bootstrap4 %}
<title>{% block title %}Cart Items{% endblock %}</title>

{% block content %}
<center>
{% bootstrap_messages %}
{% for item in products %}
<div class="col-lg-4 col-md-4 mb-4">
<div class="card h-50">
<div class="card-body">
<a href="{% url 'shop:detail' item.slug %}"><img src="/media/{{ item.image }}" width=200 height="100" alt=""></a>
<div class="card-body">
<h4 class="card-title">
<a href="{% url 'shop:detail' item.slug %}">{{ item.name|title }}</a>
</h4>
<h5>Rs. {{ item.price|floatformat:"2" }}</h5>
<h5>Shipping fee:{{item.shipping_fee}}</h5>
</div>
</div>
</div>
</div>
{% endfor %}
<b>Items({{request.session.data.items|length}})</b><br>
{% for item in products %}
{{item.name}}: Rs.{{item.price}}
<br>
{% endfor %}
<br>
<h5>Shipping Fee:</h5>
{% for item in products %}
{{item.name}}: Rs{{item.shipping_fee }} <br>
{% endfor %}
<br>
<h5>Total Price:<b style="color:blue;">Rs
{{request.session.data.price}}</b></h5>
<a class="btn btn-success" href="{% url 'shop:items_buy_now' %}">PROCEED TO CHECKOUT</a>



<br><br>

</div>



</center>
{% endblock %}

最佳答案

  1. 过滤器返回多个对象,您必须选择一个。

    product = Product.objects.filter(active=True, slug__in=sess["items"])
    if request.method == "POST":
    buyer.product = product.first()
  2. 在这种情况下,您可以使用 get 方法。

    product = Product.objects.get(active=True, slug__in=sess["items"])

更多Difference between Django's filter() and get() methods

关于python - 无法分配查询集,必须是一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55194348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com