2016-07-29 19 views
0
ein bestehendes Objekt zu aktualisieren

Ich habe ein Modell namens Buch, das ich zu einem html sende aus wie diese Daten angezeigt werden:Wie ein Formular einreichen

books = Book.objects.all() 
return render(request, 'index.html', {'books':books}) 

ich dann alle zeigen Informationen, die ich von dem Buch will im Frontend (das muss hier nicht angezeigt werden).

Anders als die Informationen des Buches im Front-End zu zeigen, möchte ich auch ein kleines Formular vorstellen, das zwei Schaltflächen haben wird sagen wir "Submit" und "Decline", die ein Attribut des Book-Objekts abhängig aktualisieren Der Knopf klickte.

Ich versuche, einen guten Weg zu finden, dies zu erreichen. Mein Gedanke ist, das gesamte Objekt an eine Ansicht zu posten, um später verarbeitet zu werden, aber ich bin nicht sicher, ob es eine gute Übung ist, ein komplettes Objekt vom Client zum Server zu senden, da dies in irgendeiner Weise beeinträchtigt sein kann.

+0

Ich möchte diesen Weg empfehlen ... Wenn Benutzer das Kontrollkästchen POST-Daten zum Backend für den Prozess aktiviert oder deaktiviert ... –

+0

@RajaSimon können Sie mehr Details dazu angeben? – John

Antwort

1

Sie müssen keine Formulardaten senden, wenn es sich nur um ein Attribut handelt, das Sie aktualisieren. Sie können etwas tun (ich verwende UUID nur als Beispiel Sie ID oder was auch immer eindeutiges Feld Sie verwenden):

# url for your update view. For example: decline 
url(r'^decline/book/(?P<book_uuid>[\w\-]+)$', 
    YourView.as_view(), 
    name="book-decline"), 

# views.py 
class YourView(View): 
    def get(self, request, *args, **kwargs): 
     book_uuid = kwargs.get('book_uuid', None) 
     book = get_object_or_404(Book, uuid= book_uuid) 
     # UPDATE YOUR BOOK HERE 

# in your templates for each book's decline button link 
<a href={% "book-decline" book.uuid %} ....> 
+0

Danke. Diese Lösung scheint in Ordnung zu sein, aber ich suchte nach einer Lösung, ohne von URLs abhängig zu sein. – John

0

Tiny Instanz eine generische Lösung zur Verfügung gestellt. Wenn Sie eine spezifischere Lösung für den Fall der Aktualisierung eines Objekts eines Modells wünschen, indem Sie ein Formular ausfüllen, das vom Benutzer ausgefüllt wird, dann hat Django etwas eingebaut, das dies für Sie erledigt. FormView ist was Sie suchen.

Siehe die offizielle Dokumentation hier ->https://docs.djangoproject.com/en/1.9/ref/class-based-views/generic-editing/#formview

1

Dies kann Ihnen helfen:

Wenn Sie mit Buch Objekt im Zusammenhang mit anderen Werten aktualisieren möchten Datenbank dann können Sie es erreichen, indem Sie folgendermaßen vorgehen:

if request.POST: 
     book_form = BookForm(request.POST) 

    if book_form.is_valid(): 

     book = Book.objects.get(pk=book_id) 
      book_form = BookForm(request.POST, instance = book) 
      book_form.save() 

Es aktualisiert das vorhandene bookObject in der Datenbank durch Filtern auf der Basis von book_id.

+0

Ich habe kein Formular. – John