2016-06-23 12 views
-1

Ich versuche, eine Instanz eines Modells in der Datenbank zu speichern, wie in diesem Artikel beschrieben:Model.create speichert nicht DB

Create-Methode von Promo Klasse:

@classmethod 
def create(cls, discount_money): 
    promo = cls(discount_money=discount_money) 

    return promo 

@staticmethod 
def create_promo(): 
    promo = Promo.create(config.SUBSCRIPTION_DISCOUNT) 
    print promo # => DHLI67LZ80T7AU1O 
    print promo.discount_money # => 20000 

self.create_promo() 

Aber nichts erscheint in meiner DB. Was vermisse ich?

+1

Warum sind Sie auf dem Modell eine neue 'create' Methode definieren, wenn Sie verwenden können, [' create'] (https: // docs.djangoproject.com/en/1.9/ref/models/querysets/#django.db.models.query.QuerySet.create) auf dem Manager für den gleichen Effekt? I.e. 'obj = Promo.objects.create (discount_money = discount_money)' speichert das Promo-Objekt in der Datenbank und gibt es zurück. – knbk

Antwort

2

Keine Methode ruft jemals save auf, so dass nichts in der Datenbank reflektiert wird.

Sie müssen sicherstellen, dass Sie save in mindestens einer dieser Methoden aufrufen. Wahrscheinlich macht mehr Sinn in der create Methode.

@classmethod 
def create(cls, discount_money): 
    promo = cls(discount_money=discount_money) 
    promo.save() 

    return promo 
+1

@ViktorDanilov - Das ist ein nicht verwandter Fehler zu Ihrer Frage, wenn eine dieser Antworten * dieses * Problem gelöst hat, sollten Sie in Betracht ziehen, einen zu akzeptieren. Du könntest immer eine neue Frage stellen, komplett mit dem, was du erforscht hast, wenn du mit deinem anderen steckenbleibst – Sayse

1

Wie es in der Django docs erwähnt wird:

Beachten Sie, dass in keiner Weise ein Modell instanziieren Datenbank berührt; für das müssen Sie speichern().

Daher müssen Sie promo.save(), um Ihren Code hinzuzufügen:

@classmethod def create(cls, discount_money): 
    promo = cls(discount_money=discount_money) 
    promo.save() 
    return promo