Ich benutze python ebay-sdk
Bibliothek für den Anschluss an ebay api.Wie füge ich neue Daten von Ebay zur Datenbank in Django hinzu?
Ich möchte einige Fälle von ebay api bekommen und in der Datenbank speichern.
Ich habe eine App und Modelle wie folgt aus:
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()
Und ich erstellt andere App ebay-finder
und ebay_find.py
Autos in eBay zu finden:
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()
Ich bin verwirrt, wie diese Daten hinzufügen von items_list zu meiner Datenbank wie in Case
. Ich muss alle die gleichen Felder wie in Case
nehmen? Kann ich einige Felder standardmäßig auf create object haben?
Ok, aber wenn ich in der Fall-Klasse 'make', die ForeignKey ist, und ich habe es in meinem ebay_finder-Skript verwendet, es nimmt diesen Feldwert oder ich muss diesen wieder im Skript hinzufügen? – Robson
Nicht sicher, dass ich vollständig verstanden habe, aber um ein make zuzuweisen, müßten Sie entweder: 'self.make = Make.objects.filter (pk = 1) .first()' oder 'self.make_id = 1' –