【问题标题】:Badly Formed hexadecimal uuid string error in Django fixtureDjango 夹具中格式错误的十六进制 uuid 字符串错误
【发布时间】:2017-04-04 14:48:02
【问题描述】:

我一直在做这个项目,我想通过类别 ID 名称过滤 all_products,但是当我这样做时,它给了我格式错误的十六进制 UUID 字符串错误。 这是models.py

from django.db import models
import uuid
# Create your models here.
class Category(models.Model):
    category = models.CharField(max_length=100)
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.category

class Product(models.Model):
    title = models.CharField(max_length=100)
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    image = models.FileField(default=None)
    desc = models.TextField(default="Random")
    price = models.DecimalField(max_digits=10, decimal_places=2)
    vnos = models.CharField(max_length=30)
    quantity = models.BigIntegerField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    times_bought = models.BigIntegerField(default=0)

    def __str__(self):
        return self.title

和views.py

def category_detail(request, category_id):
    try:
        current_category = Category.objects.get(pk=category_id)
    except Product.DoesNotExist:
        raise Http404("Album does not exist.")
    current_category_name = current_category.category
    template = loader.get_template('categories/details.html')
    all_products = Product.objects.all()
    products_by_category = Product.objects.all().filter(category=str(current_category_name))
    footer = loader.get_template('main/footer.html')
    head = loader. get_template('main/head.html')
    nav = loader.get_template('main/nav.html')
    all_categories = Category.objects.all()

    paginator = Paginator(all_products, 6)

    page = request.GET.get('page')
    try:
        all_products = paginator.page(page)
    except PageNotAnInteger:
        all_products = paginator.page(1)
    except EmptyPage:
        all_products = paginator.page(paginator.num_pages)

    context = {
        'all_products': all_products,
        'all_categories': all_categories,
        'footer': footer,
        'head': head,
        'nav': nav,
        'products_by_category': products_by_category
    }

    return HttpResponse(template.render(context, request))

我尝试了不同的方法,但没有任何帮助。当我点击某个链接时,我想按类别名称过滤产品。

当我试图激怒变量时会引发错误。

{% for product in products_by_category %}

如果我不对 products_by_category 使用过滤器,它运行正常。

【问题讨论】:

  • 请注意,当您尝试获取 Category.objects.get(pk=category_id) 时,您应该捕获 Category.DoesNotExist:
  • 是的,这是一个错字,因为我有一个用于产品的,但仍然非常感谢

标签: python django


【解决方案1】:

当按类别过滤Product 模型时,您应该使用类别实例,而不是类别名称。

products_by_category = Product.objects.filter(category=current_category)

请注意,您无需在filter() 之前调用all()

【讨论】:

  • 这不是问题
  • 我不得不猜测问题出在哪里,因为您没有在问题中包含完整的回溯。那是代码中您调用filter() 的唯一位置,那么如果它不在这里,您认为问题是什么?
  • 你是对的,但它在 uuid 中给我一个错误不是因为我错过了 all()
  • 我没有说你必须删除all(),只是你可以从代码中删除它,因为它不是必需的。该错误是因为您尝试使用str(current_category_name) 进行过滤,这不是 uuid。你应该像我上面所说的那样使用current_category
  • 谢谢,我认为它确实解决了问题
猜你喜欢
  • 2016-05-29
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多