python - /new 处的 ValueError 无法分配“'Home'”:“Listing.category”必须是“Category”实例
问题描述
我正在尝试创建一个新列表,但出现此错误:
(ValueError at /new
Cannot assign "'Work'": "Listing.category" must be a "Category" instance.)
模型.py
class Category(models.Model):
category = models.CharField(max_length=64)
def __str__(self):
return self.category
class Listing(models.Model):
title = models.CharField(max_length=64, default="")
starting_bid = models.CharField(max_length=64, default="$")
description = models.TextField(default="")
image_url = models.CharField(max_length=200, default="")
date = models.DateTimeField(default=timezone.now)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.title
视图.py
def new_listing(request):
if request.method == "POST":
title = request.POST["title"]
starting_bid = request.POST["starting_bid"]
image_url = request.POST["image_url"]
category = request.POST["category"]
description = request.POST["description"]
ins = Listing(title=title, starting_bid=starting_bid, image_url=image_url, category=category, description=description)
ins.save()
categories = Category.objects.filter()
return render(request, "auctions/new_listing.html", { "categories": categories })
解决方案
要将值设置为ForeignKey
您需要一个对象。
(/new 处的 ValueError 无法分配“'Work'”:“Listing.category”必须是“Category”实例。)
您可以使用_id
末尾的属性或使用 Category 对象。
category_id=category
# Get category object
Category.objects.get(name=category)
视图.py:
def new_listing(request):
if request.method == "POST":
query = request.POST
title = query.get("title")
starting_bid = query.get("starting_bid")
image_url = query.get("image_url")
category = query.get("category")
description = query.get("description")
category_obj = Category.objects.get(name=category)
"""
ins = Listing(
title=title, starting_bid=starting_bid,
image_url=image_url, category_id=category,
description=description
)
"""
# OR
ins = Listing(
title=title, starting_bid=starting_bid,
image_url=image_url, category=category_obj,
description=description
)
ins.save()
categories = Category.objects.all()
return render(request, "auctions/new_listing.html", { "categories": categories })
在幕后,Django 将“_id”附加到字段名称以创建其数据库列名称,请参阅Django ForeignKey
我还建议您使用表单。
推荐阅读
- php - Laravel / League Fractal 返回一个空数组而不是空对象
- python-3.x - Python Pandas Left Merge 部分时间有效?
- spring-boot - KafkaStreams 与 Spring-Kafka 的交互式查询
- angular - 如何使用管道和地图展平链接的依赖 http 请求
- c++ - 使用默认情况 c++ 时,Switch 语句卡在无限循环中
- wpf - 打印期间未显示 WPF 验证红色边框装饰
- amazon-web-services - CodePipeline:如何将 ECR 与 Elastic Beanstalk 集成?
- ios - Swift 4 - 如何覆盖标签栏将打开视图控制器
- java - SQLiteConstraintException:NOT NULL 约束android
- c++ - 如何检测可变参数函数参数列表中给定类型参数的可用性并在处理所有参数后采取行动