Ich arbeite an einer einfachen Kostenüberwachungs-App. Unten sehen Sie die Ansicht mit allen Operationen des Benutzers finden können (Kosten oder Erträge):Mehrere Django-Formulare in modalen Fenstern für eine einzelne Ansicht
Basierend auf this thread I Bootstrap-modale Fenster neue Betriebsform angezeigt werden umgesetzt:
Unten kann ManageOperations
Ansicht finden, die für das Darstellen der Ansichten verantwortlich ist, die oben dargestellt werden:
class ManageOperations(ListView, FormView, OperationMixIn):
model = Operation
form_class = OperationForm
template_name = "expenses/manage_operations.html"
success_url = reverse_lazy('manage_operations')
def get_context_data(self, **kwargs):
context = super(ManageOperations, self).get_context_data(**kwargs)
context['operations_list'] = Operation.objects.filter(user=self.request.user).order_by('-date')
return context
def get_form_kwargs(self):
kwargs = super(ManageOperations, self).get_form_kwargs()
kwargs.update(user=self.request.user,
initial={'account': Account.objects.get(user=self.request.user, default=True)})
return kwargs
def form_valid(self, form):
operation = form.save(commit=False)
operation.currency = Account.objects.get(pk=form.instance.account_id).currency
self.update_account_balance(form)
form.instance.user = self.request.user
form.save()
return super(ManageOperations, self).form_valid(form)
Ich möchte die gleichen modalen Fenster sowohl für "bearbeiten" und "löschen" Aktionen implementieren. Ich gehe davon aus, dass es durchaus für OperationDelete Ansicht einfach sein wird:
class OperationDelete(DeleteView, OperationMixIn):
model = Operation
success_url = reverse_lazy('manage_operations')
def delete(self, *args, **kwargs):
self.restore_account_balance(self.get_object().pk)
return super(OperationDelete, self).delete(*args, **kwargs)
ich nur delete
Methode, um meine ManageOperations
Ansicht bewegen konnte und machen es aus DeleteView
erben.
Die Dinge werden komplizierter, wenn es um die Bearbeitung bestehender Operationen geht. Derzeit Code finden Sie verantwortlich für eine Aktualisierung des bestehenden Eintrags Gabe:
class OperationUpdate(UpdateView, OperationMixIn):
model = Operation
form_class = OperationForm
success_url = reverse_lazy('manage_operations')
def get_form_kwargs(self):
kwargs = super(OperationUpdate, self).get_form_kwargs()
kwargs.update({'user': self.request.user})
return kwargs
def form_valid(self, form):
self.restore_account_balance(self.get_object().pk)
self.update_account_balance(form)
form.instance.user = self.request.user
return super(OperationUpdate, self).form_valid(form)
Wenn ich müde, um es in ManageOperations
Ansicht zusammenführen würde ich mit mehrere Implementierung von get_form_kwargs
und form_valid
Methoden beschäftigen.
Könnten Sie mir bitte sagen, ob ich mit dieser Methode in die richtige Richtung gehe oder ob es einen besseren und eleganteren Weg gibt, mein Problem zu lösen? Einen großen ManageOperations
View zu erstellen, der für alle Operations releated Aktionen verantwortlich sein würde, scheint mir ein bisschen albern zu sein.
ich Zeit habe ich vor, dieses Problem mit modalform musste. Warum nicht Funktion verwenden, Funktion ist viel besser, wenn die Dinge kompliziert werden. Sie können auch ein einzelnes Modell in der Datei '.html' ohne Formulare erstellen und mit ajax die gewünschte Funktion aufrufen.Das Problem beim Rendern dieser Modellformen besteht darin, dass ein Modal für jedes Element in der Ansicht gerendert werden kann –