【问题标题】:Perform CRUD operations on product class?对产品类执行 CRUD 操作?
【发布时间】:2019-06-28 07:21:50
【问题描述】:

我是 Django-oscar 的新手,我正在尝试在 Product 上开发一个简单的 CRUD 操作。我已经 fork 目录应用并创建了一个 views.py 文件

我触发了查询 Product.objects.create(title='Hello'),但创建的产品确实出现以下错误:

AttributeError: 'NoneType' 对象没有属性 'attributes'

product_title = 'MyPhone'
upc=987654321
product_class = ProductClass.objects.get_or_create(name='Phone')
def createProduct(request):
        line1
    product.name = product_title
    product.product_class = product_class
    product.upc=upc
    product.save()

当我将 product=Product() 放入 line1 时,我收到以下错误:

无法分配“(, False)”:“Product.product_class”必须是“ProductClass”实例。

当我输入product = Product.objects.create(upc=upc) 时,出现以下错误:

NoneType' 对象没有属性 'attributes'

有人指导我如何编写一个简单的创建操作吗?

【问题讨论】:

  • 模型定义有些奇怪。发布,加上 full 回溯。
  • 请提供更多解释或仔细查看我的答案。
  • 您应该对应用答案后得到的结果提供一些反馈。

标签: python django django-oscar


【解决方案1】:
ProductClass, Product, Category, ProductCategory = get_classes(
    'catalogue.models', ('ProductClass', 'Product', 'Category',
                         'ProductCategory'))
create_from_breadcrumbs = get_class('catalogue.categories', 'create_from_breadcrumbs')


 def _create_item(product_class, category_str, upc, title,
                     description, stats):
        # Ignore any entries that are NULL
        if description == 'NULL':
            description = ''

        # Create item class and item
        product_class, __ = ProductClass.objects.get_or_create(name=product_class)
        try:
            item = Product.objects.get(upc=upc)
            stats['updated_items'] += 1
        except Product.DoesNotExist:
            item = Product()
            stats['new_items'] += 1
        item.upc = upc
        item.title = title
        item.description = description
        item.product_class = product_class
        item.save()

        # Category
        cat = create_from_breadcrumbs(category_str)
        ProductCategory.objects.update_or_create(product=item, category=cat)

        return item

这是使用 django oscar 中的函数提供的信息来操作产品的实际方法。为了做出更好的设计决策,您需要遵循此约定。根据需要修改它。如果您需要更多帮助,请告诉我。谢谢。

【讨论】:

  • 我会试试这个,给我时间
  • 一定要告诉我你得到了什么,如果你需要帮助,请告诉我
  • 抱歉回复延迟。我能够成功地使它工作。我正在使用 if-else 并根据您的代码切换到 try-except 并且它有效!我还有一个问题,我们可以使用相同的代码来更改使用create_from_breadcrumbs的类别吗?
  • 当然可以。如果它对您有帮助,请接受并投赞成票。
猜你喜欢
  • 2017-09-10
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多