django save() 在 sqlite 中不起作用

django save() doesn't effect in sqlite

我有一个 scrapy 项目,想将检索到的数据保存在 sqlite 中。我在视图文件中写了 scrapy 蜘蛛。您可以在下面看到它的一部分。

这是 views.py 文件:

class DivarSpider(scrapy.Spider):
    name = "divar"


    def parse_first_page(self, response):
        .
        .
        yield scrapy.Request(url=url, method='GET', callback=self.parse_each_ads)


    def parse_each_ads(self, response):
        .
        .
        .
        src = Source()
        src.name = self.name
        ctlg = Catalogue()
        ctlg.city = city
        ctlg.price = price
        ctlg.datetime = date
        ctlg.source = self.name
        ctlg.source_token = token
        src.save()
        ctlg.save()

这是 models.py 文件:

class Source(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Catalogue(models.Model):
    source = models.ForeignKey(Source, null=False, on_delete=models.CASCADE)
    city = models.CharField(max_length=100)
    price = models.CharField(max_length=100)
    datetime = models.CharField(max_length=100)
    source_token = models.CharField(max_length=100)

为什么 src.save()ctlg.save() 不起作用?

要创建实例并保存它,您可以使用以下代码段:

src = Source(name=self.name)
src.save()

与目录模型类似。对于外键,您需要在源字段中传递 src 的实例,这将起作用。参考link

我有同样的问题,你必须引用一个模型,保存它,然后再引用另一个。 你的代码可以像这样更好:

    src = Source.objects.create(name=self.name)
    ctlg = Catalogue(city=city, price=price, datetime=date, source=self.name, 
                     source_token=token)

To create and save an object in a single step, use the create() method. https://docs.djangoproject.com/en/stable/topics/db/queries/#creating-objects

对于目录的源属性,您应该传递模型引用,而不是模型名称:

..., source = src, ...