2012-03-05 8 views
20

Chcę sprawdzić, czy wiersz w bazie danych zawiera już dane wejście. Jeśli już istnieje, nie dopuść do ponownego dodania, a jeśli nie, dodaj to jak zwykle.Jak sprawdzić, czy coś istnieje w bazie danych PostgreSQL przy użyciu django?

Jak mogę zapytać bazę danych, czy coś istnieje, bez wyciągania całej zawartości z bazy danych w celu sprawdzenia?

+0

Możliwy duplikat [co jest właściwym sposobem, aby zweryfikować, czy obiekt istnieje w widoku django bez powrotu 404? ] (http://stackoverflow.com/questions/639836/what-is-the-right-way-to-validate-if-an-object-exists-in-a-django-view-without-r) – Wtower

Odpowiedz

44

Można użyć

Entry.objects.filter(name='name', title='title').exists() 

ten powróci do was prawda/fałsz wartości. Kiedy używasz count, orm generuje zapytanie, które będzie wykonywane znacznie dłużej niż w metodzie exist. Metoda get spowoduje zgłoszenie wyjątku, gdy obiekt nie istnieje.

request.POST jest słownikiem więc sprawdzić db z nim użyć, tj:

Entry.objects.filter(name=request.POST['name'], title=request.POST['title']).exists() 
+0

dziękuję. to bardzo pomogło. –

+0

Możesz zmienić ciąg słownika na unicode: np. Unicode ("string") lub u'string ' – szaman

+0

Czy mogę pomóc mi nadać alertbox (używając javascript lub innego), jeśli instancja już istnieje – suhailvs

2

Odpowiedź na pytanie brzmi "tak". Jednak myślę, że powinieneś również zbadać alternatywę do wysyłania zapytań do bazy danych; utwórz unikalny klucz na zestawie pól, dla których nie chcesz, aby istniały duplikaty.

Teraz, aby odpowiedzieć na twoje pytanie. Sprawdź docs Django dokonywania zapytania:

https://docs.djangoproject.com/en/dev/topics/db/queries/

W skrócie, jeśli masz model danych dla rzeczy, Thing.objects jest interfejsem dostępu do zapytań. od docs (używając blogu wpis, który ma pole string „nagłówek” jako przykład):

Entry.objects.get(headline__exact="Man bites dog") 

pełnej możliwości interfejsu są takie, jakich można oczekiwać od bazy (jest bogaty zestaw porównań do danych innych niż dokładne dopasowania). Sugerowałbym dalsze zapoznanie się z dokumentacją dotyczącą konkretnego problemu.

+0

Tak w tym przypadku wpis jest klasą dla modelu. Dostarczone przez użytkownika wartości wychodzą na żądanie.POST ["kod gotówkowy"], a nie tylko request.POST. Wyszukiwanie słownika jest ważne. – ccoakley

Powiązane problemy