gpt4 book ai didi

python - 带有外键的 scrapy djangoitem

转载 作者:太空狗 更新时间:2023-10-30 00:55:48 25 4
gpt4 key购买 nike

这个问题是在这里问的Foreign Keys on Scrapy没有公认的答案,所以我在这里用更清晰定义的最小设置重新提出问题:

django 模型:

class Article(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
category = models.ForeignKey('categories.Category', null=True, blank=True)

请注意,category 的定义在这里无关紧要,但它确实使用了 ForeignKey。所以,在 django shell 中,这会起作用:

c = Article(title="foo", content="bar", category_id=2)
c.save()

scrapy 项目:

class BotsItem(DjangoItem):
django_model = Article

scrapy 管道:

class BotsPipeline(object):
def process_item(self, item, spider):
item['category_id'] = 2
item.save()
return item

对于上面的代码,scrapy 会报错:

exceptions.KeyError: 'BotsItem does not support field: category_id'

公平,因为 category_id 没有出现在 django 模型中,我们从中得到了 scrapy 项目。作为记录,如果我们有管道(假设我们有一个类别 foo):

class BotsPipeline(object):
def process_item(self, item, spider):
item['category'] = 'foo'
item.save()
return item

现在 scrapy 提示:

exceptions.TypeError: isinstance() arg 2 must be a class, type, or tuple
of classes and types

那么我们到底应该怎么做呢?

最佳答案

好的,我设法解决了这个问题,我把它放在这里作为记录。正如最后一个 exceptions.TypeError 所暗示的,item['category'] 需要一个 Category 类的实例,在我的例子中我使用的是 django-categories所以在管道中只需替换为这个(假设 Category 已经填充到 ORM 中):

class BotsPipeline(object):
def process_item(self, item, spider):
item['category'] = Category.objects.get(id=2)
item.save()
return item

关于python - 带有外键的 scrapy djangoitem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24339063/

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