2016-06-02 1 views
1

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?

Antwort

0

Wenn Sie möchten, dass Ihre Daten mit dem geringsten Aufwand gespeichert werden, dann verwenden Sie die gleichen Feldnamen.

Sie haben ein Beispiel eines Modellfeld mit einem Standard in Ihrem eigenen Code:

currency = models.CharField(max_length=3, default='USD') 

Sie können auch Ihr Modell der save() Methode überschreiben:

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

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

+0

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' –

Verwandte Themen