2014-10-06 65 views
0

我想用scrapy Django的,但我不知道該如何處理Django的外鍵
我的數據庫PostgreSQL的是scrapy和Django:如何使用外鍵

請指引我。謝謝。

models.py:

class ShoppingApple(models.Model): 
    link  = models.URLField(max_length=255)  
    title  = models.CharField(max_length=100)  

class ImageApple(models.Model): 
    article = models.ForeignKey(ShoppingApple)  
    image =models.CharField(max_length=255) 

pipelines.py:

class ShopPipeline(object): 
    if isinstance(item, Shop_appleItem): 
     shopping = item.save(commit=False) 
     shopping.save() 
     return item 

    if isinstance(item, Shop_apple_imgItem): 
     shopping = item.save(commit=False) 
     shopping.save() 
     return item 

蜘蛛這樣的:

def parse(self,response): 
    item = Shopping_appleItem() 
    product = Shopping_apple_imgItem() 
    sel = Selector(response) 
    item['link'] = sel.css(" ").extract() 
    item['title'] = sel.css(" ").extract() 
    product['image'] = sel.css(" ").extract() 
    yield item 
    yield product 

當我跑我的scrapy,錯誤的是:

django.db.utils.IntegrityError: null value in column "article_id" violates not-null constraint 
DETAIL: Failing row contains (1, null, http://test...). 

回答

0

您是否檢查過您是否有空值? 嘗試將默認設置爲null以進行測試。

ALTER TABLE article SET DEFAULT NULL 

PostgreSQL ALTER TABLE

然後再次運行,看看你得到同樣的錯誤。

0

您是否使用South或其他任何工具進行遷移(或Django 1.7+)?如果是這樣,只需更新模型到:

class ImageApple(models.Model): 
    article = models.ForeignKey(ShoppingApple)  
    image =models.CharField(max_length=255, null=True) 

生成並運行遷移,這應該做的伎倆。

+0

我發現這也許是因爲我沒有保存'''''''',但我stiil不知道該怎麼辦 – user2492364 2014-10-06 08:30:44

0

我所做的是使用正規的scrapy項目(不是django項目,這個東西是相當有限的),只是手動創建對象並添加我需要的東西。

class MyItem(scrapy.Item): 
    name = scrapy.Field() 
    image_url = scrapy.Field() 

並手動處理下載,並通過自己創建的對象:

高清get_remote_image(個體經營,對象):

if self.image_url: 
    myopener = MyOpener() 
    page = myopener.retrieve(self.image_url) 
    response = page[0] 
    image = open(response) 

    extension = os.path.splitext(image.name)[1] 
    picture = Picture(object=object) 
    picture.save() 
    picture.picture.save('new' + extension, File(image)) 

object = Object.objects.create(foo="something") 
object.save() 
self.image_url = item['image_url'] 
self.get_remote_image(object) 

你可以用的urllib輕鬆搞定圖片

我試圖用django項目做到這一點,但厭倦了嘗試和發現這種方式。實現起來並不困難,並且在如何創建對象時允許更多的自由。 不要忘了添加django.setup()到你的scrapper的settings.py。