gpt4 book ai didi

python - 我无法在外键中保存唯一值

转载 作者:行者123 更新时间:2023-11-29 13:53:32 25 4
gpt4 key购买 nike

我有以下模型:

class Vendor(models.Model):
name = models.CharField(max_length=50, unique=True)
seo_name = models.SlugField()

def __str__(self):
return self.name

class Product(models.Model):
vendor = models.ForeignKey(Vendor, unique=False, blank=True, default=None, null=True, on_delete=models.SET_NULL)

我制作 xml 文件的解析器,在这些文件中为每个位置设置供应商,我只需要在供应商模型中保存唯一值,但对于每个产品集他的供应商,我是这样的:

for p in products:
vendor = Vendor()
vendor.name = p['vendor']
try:
vendor.save()
except:
pass
product.vendor = vendor

结果是在 Product vendor 的模型中只分配给那些在解析时他们的 vendor 还没有被保存的值。问题是如何确保将供应商分配给每个产品?

产品中cicle p的所有代码:

def adversolution_aizel(xml_file):
e = ET.parse(xml_file)
d = etree_to_dict(e.getroot())
shop_name = d['yml_catalog']['shop']['name']
shop_company = d['yml_catalog']['shop']['company']
shop_url = d['yml_catalog']['shop']['url']
shop_attr = Shop()
shop_attr.name = shop_name
shop_attr.seo_name = shop_company
shop_attr.import_url = shop_url
try:
shop_attr.save()
except:
pass

products = d['yml_catalog']['shop']['offers']['offer']
for p in products:
product = Product()
product.external_url = p['url']
product.price = p['price']
product.old_price = p['oldprice']
product.currencies = p['currencyId']
# product.category_id = p['categoryId']
#############################################################################
picture = Image()
picture.external_img_url = p['picture']
picture.save()
product.picture = picture
##############################################################################
product.name = p['name']
##############################################################################
vendor = Vendor()
vendor.name = p['vendor']
try:
vendor.save()
except:
pass
product.vendor = vendor
##############################################################################
product.shop = shop_name
product.description = p['description']
product.save()

最佳答案

你应该使用 get_or_create()供应商方法:

for p in products:
product = Product()
# ...

vendor, _ = Vendor.objects.get_or_create(name=p['vendor'])
product.vendor = vendor # or product.vendor_id = vendor.id

product.shop = shop_name
product.description = p['description']
product.save()

关于python - 我无法在外键中保存唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36386114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com