【问题标题】:Django object has no attribute 'all'Django 对象没有属性“全部”
【发布时间】:2014-11-11 15:19:19
【问题描述】:

我对返回以下错误的外键字段进行查询。

'Category' object has no attribute 'all'

这是我的查询:

p = get_object_or_404(Product, slug=product_slug)
categories = p.categories.all()

基于这些模型:

class Category(models.Model):
  name = models.CharField(max_length=50)
  slug = models.SlugField(max_length=50,  unique=True, help_text='Unique value from product page URL, created from name')
  is_active = models.BooleanField(default=True)
  created_at = models.DateTimeField(auto_now_add=True)
  updated_at = models.DateTimeField(auto_now=True)

class Product(models.Model):
  name = models.CharField(max_length=255, unique=True)
  slug = models.SlugField(max_length=255, unique=True, help_text='Unique value for product page URL, created from name')
  created_at = models.DateTimeField(auto_now_add=True)
  updated_at = models.DateTimeField(auto_now=True)
categories = models.ForeignKey(Category, null=True)

我了解此问题是外键仅引用一个模型的结果;但是,当我尝试运行时:

categories = p.categories

我返回以下错误:

'Category' object is not iterable

我不确定如何解决此问题。

【问题讨论】:

  • 您放置模型的方式允许您仅将单个类别与每个产品相关联,您可能在这里寻找 m2m 关系。尝试在 django 文档中阅读更多内容。

标签: django django-models


【解决方案1】:

您应该为您的人际关系使用不同的方法。我看到你的代码的方式应该是多对多关系,因为一个产品可能属于 N 个类别,一个类别可能有 N 个附加到它的产品。

查看ManyToManyField

无论如何尝试在您的 Product 模型中更改此设置:

categories = models.ManyToManyField(Category, null=True)

【讨论】:

    猜你喜欢
    • 2020-02-11
    • 2015-02-19
    • 2016-03-30
    • 2021-04-05
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多