Django 刮痧上的外键

Django 刮痧上的外键,django,django-models,web-scraping,scrapy,scrape,Django,Django Models,Web Scraping,Scrapy,Scrape,我正在和scrapy做一个片段,我在django上的模型是: class Creative(models.Model): name = models.CharField(max_length=200) picture = models.CharField(max_length=200, null = True) class Project(models.Model): title = models.CharField(max_length=200) descri

我正在和scrapy做一个片段,我在django上的模型是:

class Creative(models.Model):
    name = models.CharField(max_length=200)
    picture = models.CharField(max_length=200, null = True)

class Project(models.Model):
    title = models.CharField(max_length=200)
    description = models.CharField(max_length=500, null = True)
    creative = models.ForeignKey(Creative)

class Image(models.Model):
    url = models.CharField(max_length=500)
    project = models.ForeignKey(Project)
还有我的刮痧模型:

from scrapy.contrib.djangoitem import DjangoItem
from app.models import Project, Creative

class ProjectItems(DjangoItem):
    django_model = Project

class CreativeItems(DjangoItem):
    django_model = Creative
因此,当我保存时:

creative["name"]  = hxs.select('//*[@id="owner"]/text()').extract()[0]
picture  = hxs.select('//*[@id="owner-icon"]/a/img/@src').extract()
if len(picture)>0:
    creative["picture"] = picture[0]
creative.save()


# Extract title and description of the project
project["title"] = hxs.select('//*[@id="project-title"]/text()').extract()[0]
description = hxs.select('//*[@class="project-description"]/text()').extract()
if len(description)>0:
    project["description"] = description[0]
project["creative"] = creative
project.save()
我得到了一个错误:

Project.creative必须是“creative”实例

那么,我如何在scrapy上添加foreing键值呢?

比如,将您的创意ID直接放在creative\u ID中,我认为应该可以:

 project["creative_id"] = creative.id

它将指定外键,而不会因为缺少对象而打扰您(因为您处于一个不直接接触模型对象的粗糙环境中…。

这可以通过将
creative.save()
的返回值指定给
project['creative'处的值来完成
例如,在下面的示例中,我们使用
djangoCreativeItem
变量将此信息传递给项目:

creative["name"]  = hxs.select('//*[@id="owner"]/text()').extract()[0]
picture  = hxs.select('//*[@id="owner-icon"]/a/img/@src').extract()   
if len(picture)>0:
    creative["picture"] = picture[0]
djangoCreativeItem = creative.save()

# Extract title and description of the project
project["title"] = hxs.select('//*[@id="project-title"]/text()').extract()[0]
description = hxs.select('//*[@class="project-description"]/text()').extract()
if len(description)>0:
    project["description"] = description[0]
project["creative"] = djangoCreativeItem
project.save()

creative
是通过实例化
creative
创建的吗?您能否包含错误的整个回溯?