2012-03-30 17 views
77

zawsze czytam, że powinienem użyćMenedżer modelu Django. Gdzie można znaleźć dokumentację?

model = Model(a=5, b=6) 
model.save() 

Ale właśnie widziałem tam jest funkcją menedżera tworzyć, bo widziałem aplikację opensource django używając go.

model = Model.objects.create(a=5, b=6) 
print model.pk 
1 

Czy sugeruje się korzystanie z niego? Czy nadal preferuje się stosowanie metody .save. Zgaduję, że objects.create spróbuje stworzyć go bez względu na wszystko, podczas gdy save może zapisać istniejący obiekt, jeśli określono pk.

Są docs, które znalazłem: https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects

+11

dlaczego to pytanie zostało odrzucone? Właśnie przyjechałem tutaj z tym samym pytaniem i uznałem to za przydatne. – Ferguzz

+4

Ja też nie wiedziałem, może ludzie myśleli, że to głupie i oczywiste. Nie przejmuj się tym zbytnio: P otrzymałem odpowiedź, jestem szczęśliwa. Szukałem również bez wyników, więc zapytałem. –

Odpowiedz

1

Zasadniczo te dwie metody to equivalent. Użytkowanie Model.objects.create może być preferowane, ponieważ jest bardziej dostosowane do stylu Django.

40
p = Person.objects.create(first_name="Bruce", last_name="Springsteen") 

odpowiednikiem:

p = Person(first_name="Bruce", last_name="Springsteen") 
p.save(force_insert=True) 

force_insert oznacza, że ​​nowy obiekt będzie zawsze tworzone.
Zazwyczaj nie musisz się o to martwić. Jeśli jednak model zawiera ręczną wartość klucza podstawowego, która została ustawiona, a wartość już istnieje w bazie danych, wywołanie metody create() zakończy się niepowodzeniem zIntegrityError, ponieważ klucze podstawowe muszą być unikalne. Przygotuj się na obsługiwać wyjątek, jeśli używasz ręcznych kluczy głównych.

1

Tworzenie zasadniczo robi to samo. poniżej znajduje się kod źródłowy do utworzenia.

def create(self, **kwargs): 
    """ 
    Creates a new object with the given kwargs, saving it to the database 
    and returning the created object. 
    """ 
    obj = self.model(**kwargs) 
    self._for_write = True 
    obj.save(force_insert=True, using=self.db) 
    return obj 

tworzy instancję, a następnie zapisuje ją.

Powiązane problemy