From 280d9d40942ee64feded40f1eeee04cc21f3c434 Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Wed, 29 Aug 2012 11:26:52 -0300 Subject: [PATCH] added file missed in previous commit --- scrapy/contrib/djangoitem.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 scrapy/contrib/djangoitem.py diff --git a/scrapy/contrib/djangoitem.py b/scrapy/contrib/djangoitem.py new file mode 100644 index 000000000..571dace5c --- /dev/null +++ b/scrapy/contrib/djangoitem.py @@ -0,0 +1,33 @@ +from scrapy.item import Field, Item, ItemMeta + + +class DjangoItemMeta(ItemMeta): + + def __new__(mcs, class_name, bases, attrs): + cls = super(DjangoItemMeta, mcs).__new__(mcs, class_name, bases, attrs) + cls.fields = cls.fields.copy() + + if cls.django_model: + cls._model_fields = [] + cls._model_meta = cls.django_model._meta + for model_field in cls._model_meta.fields: + if model_field.auto_created == False: + if model_field.name not in cls.fields: + cls.fields[model_field.name] = Field() + cls._model_fields.append(model_field.name) + return cls + + +class DjangoItem(Item): + + __metaclass__ = DjangoItemMeta + + django_model = None + + def save(self, commit=True): + modelargs = dict((k, self.get(k)) for k in self._values + if k in self._model_fields) + model = self.django_model(**modelargs) + if commit: + model.save() + return model