首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ebay中的新数据添加到Django数据库中?

如何将ebay中的新数据添加到Django数据库中?
EN

Stack Overflow用户
提问于 2016-06-02 08:33:37
回答 1查看 218关注 0票数 1

我使用python ebay-sdk库连接到ebay。

我想从ebay api中获取一些案例,并将其保存到数据库中。

我有一个像这样的应用程序和模型:

代码语言:javascript
复制
class Case(models.Model):
    # case is not necessarily a listing (often O2M)
    STATUS = Choices('new', 'cancelled', 'active', 'taken_down', 'archived')

    name = models.CharField(max_length=512)
    when_created = models.DateTimeField(default=now, blank=True)
    user = models.ForeignKey(User)
    make = models.ForeignKey(Make)
    status = StatusField(default=STATUS.new)
    platform = models.ForeignKey(Platform, on_delete=models.CASCADE)
    listing_id = models.CharField(max_length=64)
    listing_owner = models.CharField(max_length=128)
    url = models.CharField(max_length=512)
    price = models.FloatField(blank=True, null=True)
    # for now currency as char is ok.
    currency = models.CharField(max_length=3, default='USD')
    quantity = models.IntegerField(default=1)
    when_listing_started = models.DateTimeField(blank=True, null=True)
    when_listing_ends = models.DateTimeField(blank=True, null=True)
    valid_days = models.IntegerField(blank=True, null=True)

    objects = models.Manager.from_queryset(CaseQueryset)()

    def __str__(self):
        return self.name

    @property
    def days_valid(self):
        created = self.when_created.replace(tzinfo=None)
        now = datetime.datetime.utcnow().replace(tzinfo=None)
        datetime.timedelta(6, 1)
        return (now - created).days

    def handle_sent_report(self):
        self._set_active_state()

    def handle_cancel(self):
        self._set_cancelled_state()

    def _set_active_state(self):
        if self.status != Case.STATUS.new:
            raise InvalidCaseStatus
        self.status = Case.STATUS.active
        self.save()

    def _set_cancelled_state(self):
        if self.status not in (Case.STATUS.new, Case.STATUS.active):
            raise InvalidCaseStatus
        self.status = Case.STATUS.cancelled
        self.save()

我还创建了其他应用程序ebay-finderebay_find.py,以便在eBay中找到汽车:

代码语言:javascript
复制
from ebaysdk.finding import Connection as Finding

from django.db import models

from cases.models import Case
from trademarks.models import Make


def ebay_find():
    pass

api = Finding(domain='svcs.sandbox.ebay.com', appid="MY_EBAY_APP_ID", config_file=None)
response = api.execute('findItemsAdvanced', {'keywords': 'Cadillac'})
items = response.dict()
items_list = items['searchResult'].get('item')

ebay_cases = []

for item in items_list:
    new_case = Case.objects.create(
        name=item['title'],
        platform="Ebay",
        listing_id=car["model"],
        url=item['viewItemURL'],
        price=item['sellingStatus']['currentPrice']['value'],
        currency=item['sellingStatus']['currentPrice']['_currencyId']
    )
    new_case.save()

我很困惑如何像在items_list中那样将这些数据从Case添加到我的数据库中。我必须选择和Case一样的所有相同的字段?可以在create上默认设置一些字段吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-02 08:44:29

如果您希望以最少的麻烦保存数据,则可以使用相同的字段名。

在您自己的代码中有一个默认的模型字段示例:

代码语言:javascript
复制
currency = models.CharField(max_length=3, default='USD')

还可以重写模型的save()方法:

代码语言:javascript
复制
def save(self, *args, **kwargs):
    super(Case, self).save(*args, **kwargs)
    if not self.when_listing_started:
        self.when_listing_started = datetime.datetime.now()
        super(Case, self).save(*args, **kwargs)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37586603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档