我不能在外键中保存uniq值

2024-03-28 10:01:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下型号:

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文件的解析器,在这些文件中vendor set for each position,我只需要在vendor model中保存唯一的值,但是对于每个产品集他的vendor,我做如下:

for p in products:
    vendor = Vendor()
    vendor.name = p['vendor']
    try:
        vendor.save()
    except:
        pass
    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()

Tags: nametrueurl产品modelssaveymlxml
1条回答
网友
1楼 · 发布于 2024-03-28 10:01:01

您应该对供应商使用^{}方法:

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()

相关问题 更多 >