Wenn es Ihnen passt, könnte das Ganze am einfachsten mit JavaScript erledigt werden. Erstellen Sie Handler für Erstellen/Bearbeiten/Löschen. Erstellen rendert ein leeres Formular für ein GET und validiert/speichert für ein POST, indem das neue Element zum Verkauf hinzugefügt wird, dem es gehören sollte. Bearbeiten/Löschen sollte ziemlich offensichtlich folgen.
Ich würde wahrscheinlich die Handler einfach HTML-Partials rendern lassen, indem ich JavaScript benutze, um das HTML bei GET in den DOM zu ziehen und die Daten bei POSTs an den Server zu übermitteln.
Annehmend die Modelle,
class Sale(models.Model):
items = models.ManyToMany('Item', related_name='sales')
# ...
class Item(models.Model):
# ...
Dann könnten wir einige Handler wie diese erstellen:
def create_item(request, saleID=""):
sale = get_object_or_404(Sale, =saleID) # <- holen Sie das Sale-Objekt
if request.method == 'POST':
form = ItemForm(request.POST) # <- könnte hier den Sale nehmen und .add() in save() machen
if form.is_valid():
i = form.save()
sale.items.add(i) # <- oder hier im View hinzufügen
if request.is_ajax():
return HttpResponse('ok')
# umleiten mit Nachrichten oder was auch immer, wenn nicht ajax
else:
# ein leeres Formular erstellen und so weiter
# das Formular rendern
def edit_item(request, id|pk|slug=None):
item = get_object_or_404(Item, slug=slug)
if request.method == 'POST':
# das Formular überprüfen, speichern, 'ok' zurückgeben, wenn ajax, umleiten, wenn nicht ajax
else:
form = EditForm(instance=item)
# das Formular rendern
def delete_item(request, id|pk|slug=None):
if request.method == 'POST':
# das Element löschen und umleiten oder einfach "ok" zurückgeben, wenn is_ajax
# Dialog zur Bestätigung rendern
Für den Frontend-Code würde ich eine Kombination von http://api.jquery.com/load/, http://api.jquery.com/jQuery.get/ und http://api.jquery.com/jQuery.post/ verwenden, etc aber jedes JavaScript-Framework wird funktionieren.