python - ValueError 无法分配“]
问题描述
我是一名学习 Django 的学生。我想实现以便在订购产品时收到订单(加入模型)数据库中的产品代码,但这很困难,因为我不断收到类似标题的错误。我想我会死,因为它没有解决太久。当我使用 product.object.all() 时,所有查询集都被加载,即使我使用过滤器,也会发生错误。我怎么解决这个问题?如果您能回复,那就太荣幸了。
错误信息
ValueError at /join/element_detail/ 无法分配“<QuerySet [<Product: 학잠>, <Product: 헤라 블랙쿠션>, <Product: 종근당 활력 비타민B>, <Product: 코디 순수 3겹데코>, <Product: 다이어리>, <Product: 화이트 스탠드 조명>, <Product: 파이썬 웹 프로그래밍 교재>, <Product: 나이키 후드집업>]>": "Join.product_code" 必须是"Product.instance"
join / views.py
join.product_code = product
这部分似乎是问题所在。
模型.py
class Product(models.Model):
product_code = models.AutoField(primary_key=True)
username = models.ForeignKey(Member, on_delete=models.CASCADE, db_column='username')
category_code = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, related_name='products')
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True, unique=False, allow_unicode=True)
image = models.ImageField(upload_to='products/%Y/%m/%d', blank=True)
benefit = models.TextField()
detail = models.TextField()
target_price = models.IntegerField()
start_date = models.DateField()
due_date = models.DateField()
class Meta:
ordering = ['product_code']
index_together = [['product_code', 'slug']]
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('zeronine:product_detail', args=[self.product_code, self.slug])
class Join(models.Model):
join_code = models.AutoField(primary_key=True)
username = models.ForeignKey(Member, on_delete=models.CASCADE, db_column='username')
product_code = models.ForeignKey(Product, on_delete=models.CASCADE, db_column='product_code')
part_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.join_code)
class Meta:
ordering = ['join_code']
我的猜测是这部分有问题。(join/views.py)我认为在接收产品的过程中出现了问题,但我不知道如何。
加入/views.py
def element_detail(request):
designated_object = Designated.objects.all()
element_object = Element.objects.all()
value_object = Value.objects.all()
product = Product.objects.all()
if request.method == "POST":
join = Join()
join.product_code = product
join.username = request.user
join.part_date = timezone.now()
join.save()
return render(request, 'zeronine/list.html')
return render(request, 'zeronine/detail.html', {'designated_object': designated_object,
'element_object': element_object,
'value_object': value_object})
zeronine/views.py
def product_in_category(request, category_slug=None):
current_category = None
categories = Category.objects.all()
products = Product.objects.all()
if category_slug:
current_category = get_object_or_404(Category, slug=category_slug)
products = products.filter(category_code=current_category)
return render(request, 'zeronine/list.html', {'current_category': current_category,
'categories':categories,
'products':products})
def product_detail(request, id, product_slug=None):
current_category = None
categories = Category.objects.all()
products = Product.objects.all()
product = get_object_or_404(Product, product_code=id, slug=product_slug)
designated_object = Designated.objects.filter(rep_price='True')
element_object = Element.objects.all()
value_object = Value.objects.all()
return render(request, 'zeronine/detail.html', {'product':product,
'products':products,
'current_category': current_category,
'categories':categories,
'designated_object': designated_object,
'element_object':element_object,
'value_object':value_object})
zeronine/detail.html
<form method="POST" style="margin-left: 110px;" action="{% url 'zeronine:element_detail' %}">
<div class="form-group row">
<label for="value_code" class="col-sm-2 col-form-label"><b>옵션</b></label>
<div class="col-sm-5">
<select type="text" class="form-control" name="value_code" id="value_code">
{% for value in value_object %}
{%if value.product_code == product %}
<option value="{{value.value_code}}">{{value.name}}</option>
{% endif %}
{% endfor %}
</select>
</div>
</div>
{% csrf_token %}
{% if not user.is_authenticated %}
<a onclick="alert('로그인 후 참여가 가능합니다.');" style="cursor:pointer;">
<button type="submit" style="background:black; border-color:black;" class="btn btn-primary"> 참여하기</button></a>
<a onclick="alert('로그인 후 찜하기가 가능합니다.');" style="cursor:pointer;">
<button type="submit" style="background:white; color:black; border-color:black;" class="btn btn-primary">찜하기</button></a>
{% else %}
<a onclick="alert('{{ product.name }} 공동구매 참여가 완료되었습니다.');" style="cursor:pointer;">
<button type="submit" action="{% url 'zeronine:element_detail' %}" style="background:black; border-color:black;" class="btn btn-primary"> 참여하기</button></a>
<a onclick="alert('{{ product.name }} 상품을 찜했습니다.');" style="cursor:pointer;">
<button type="submit" style="background:white; color:black; border-color:black;" class="btn btn-primary">찜하기</button></a>
{% endif %}
</form>
解决方案
def element_detail(request):
designated_object = Designated.objects.all()
element_object = Element.objects.all()
value_object = Value.objects.all()
product = Product.objects.all()
if request.method == "POST":
product_id = request.POST.get('value_code') # new
product = Product.objects.get(product_code=product_id) # new
# Or
#product_ids = request.POST.getlist('value_code')
#products = Product.objects.filter(product_code__in=product_ids)
#loop all products and save example;
#for product in products:
# join = Join()
# join.product_code = product
# join.username = request.user
# join.part_date = timezone.now()
# join.save()
join = Join()
join.product_code = product
join.username = request.user
join.part_date = timezone.now()
join.save()
return render(request, 'zeronine/list.html')
编辑以包含模板中的多个值,我当然假设。
推荐阅读
- .net - 无法在一天中的特定时间连接到网络服务器
- python - django:将表名作为用户的输入,并从数据库中显示表的内容
- c# - 如何在 C# 中跨 2 个图片框画一条线?
- ios - 如何在 iOS 13.3 上使用 xib 显示 UITableViewCell?
- reactjs - 如何使用 React 将变量引用到子组件?
- mongodb - MongoDB查询根据条件将字段从根文档移动到子文档
- coreml - 如何使用 Core ML 分析设备运动值
- swift - 如何检测快速移动的分数节点
- sql - SQL 按列分组,但基于另一列分段
- java - 如何在不跳过 Java 中的零的情况下读取和写入字节