2012-11-28 38 views
2

感谢您在这里阅读我的问题。Django适配器:如何正确使用更新元选项

我正在做一家摄影公司的网上商店,我需要阅读一个csv文件来更新数据库上的产品。我正在使用django-adaptors迭代文件并保存信息,现在第一次运行良好,但如果再次运行该命令,应用程序将创建新对象而不是覆盖现有信息。

问题是我不知道什么是使用更新元选项的正确方法。 (你可以看到它在the documentation

这是代码,我现在所拥有的:

from models import Type, Vendor, Product 
from adaptor.model import CsvModel 
from adaptor import fields as adaptor_fields 

# Prepare functions here, but are not relevant information 

class csv(CsvModel): 
    mfr_code = adaptor_fields.CharField() 
    main_photo_url = adaptor_fields.CharField() 
    name = adaptor_fields.CharField() 
    product_url = adaptor_fields.CharField() 
    vendor = adaptor_fields.CharField(prepare=get_or_create_vendor) 
    type = adaptor_fields.CharField(prepare=get_or_create_type) 
    subtype = adaptor_fields.IgnoredField() 
    description = adaptor_fields.CharField() 
    specs = adaptor_fields.CharField() 
    tags = adaptor_fields.CharField() 
    stock = adaptor_fields.IntegerField(prepare=get_stock_value) 
    price = adaptor_fields.IntegerField(prepare=format_usd) 

    class Meta: 
     delimiter = ',' 
     dbModel = Product 
     update = { 
      'keys': ['D1 Basic Kit 250/500', 'D1 Studio Kit 250/250'] 
     } 

正如你可以在上面看到我与'键的值的字典,但我不知道如何定义“自然键”的列表,并且在尝试运行该命令时出现KeyError异常。

有人可以解释我做什么是正确的方法吗?

感谢您的回答。

Cristian

回答

2

'keys'应指出字段名称,而不是字段值。我想'D1基本套件250/500'或'D1 Studio套件250/250'是名称,那么你应该有这样的东西:

class csv(CsvModel): 
    mfr_code = adaptor_fields.CharField() 
    main_photo_url = adaptor_fields.CharField() 
    name = adaptor_fields.CharField() 
    product_url = adaptor_fields.CharField() 
    vendor = adaptor_fields.CharField(prepare=get_or_create_vendor) 
    type = adaptor_fields.CharField(prepare=get_or_create_type) 
    subtype = adaptor_fields.IgnoredField() 
    description = adaptor_fields.CharField() 
    specs = adaptor_fields.CharField() 
    tags = adaptor_fields.CharField() 
    stock = adaptor_fields.IntegerField(prepare=get_stock_value) 
    price = adaptor_fields.IntegerField(prepare=format_usd) 

    class Meta: 
     delimiter = ',' 
     dbModel = Product 
     update = { 
      'keys': ['name'] # or mfr_code, main_photo_url, etc..., price 
     } 
+0

完美!谢谢你的回答,做到了! –

相关问题