Shopify Python API变体选项不要写入存储

时间:2017-03-20 22:10:58

标签: python api shopify

我似乎无法创建具有多种选项的产品。我尝试了一切,Shopify官方图书馆的文档很差。我查看了API参考指南并搜索其他表单,但似乎无法找到正确的语法。代码如下。我尝试使用两个选项创建产品,例如option1是size,option2是color。打印输出也没有显示错误消息,但Shopify商店中没有显示变体选项,只显示带有0个变体的产品。

new_product = shopify.Product()
new_product.title = "My Product"
new_product.handle = "test-product"
##what I've tried... and countless others
#First example of new_product.variants
new_product.variants = shopify.Variant({'options': {'option1' : ['S', 'M', 'L', 'XL'], 'option2' : ['Black', 'Blue', 'Green', 'Red']}, 'product_id': '123456789'})
#Second example of new_product.variants
new_product.variants = shopify.Variant({'options': [{'option1': 'Size', 'option2': 'Colour','option3': 'Material'}]})
#Thrid example of new_product.variants
new_product.variants = shopify.Variant([
                      {'title':'v1', 'option1': 'Red', 'option2': 'M'},
                      {'title':'v2', 'option1' :'Blue', 'option2' :'L'}
                      ])
new_product.save()
##No errors are output, but doesn't create variants with options
if new_product.errors:
    print new_product.errors.full_messages()
print "Done"

1 个答案:

答案 0 :(得分:3)

文档实际上是正确的,但它确实令人困惑。看起来你似乎缺少三个要点:

  • 选项名称在产品上设置,而不是变体
  • Product.variantsVariant资源的列表;对于您想要的每个变体,您需要Variant资源
  • 您只需为Variant option1option2option3属性
  • 中的每一个设置一个字符串

示例:

import shopify

# Authenticate, etc
# ...

new_product = shopify.Product()
new_product.title = "My Product"
new_product.handle = "test-product"
new_product.options = [
    {"name" : "Size"},
    {"name" : "Colour"},
    {"name" : "Material"}
]

colors = ['Black', 'Blue', 'Green', 'Red']
sizes = ['S', 'M', 'L', 'XL']

new_product.variants = []
for color in colors:
    for size in sizes:
        variant = shopify.Variant()
        variant.option1 = size
        variant.option2 = color
        variant.option3 = "100% Cotton"
        new_product.variants.append(variant)

new_product.save()

值得注意的是,每个变体的选项组合必须是唯一的,否则它将返回错误。一个没有记录的怪癖是当你没有在父options资源上提供任何Product时,它会隐式地给你一个名为Style的选项,同样,如果您没有在变体上分配任何选项,那么它会自动为每个变体Default Title分配option1。由于每个选项组合都是唯一的,如果您没有分配任何optionsoption1值,那么当您只有一个变体时,它就不会出错。如果您尝试使用多个变体,它会给您带来的错误会让您感到困惑,因为它会引用变体选项的非唯一性,而不是缺少optionsoption1参数。< / p>