Ich habe diese Frage viel Zeit hier gefragt, aber ich kann nicht herausfinden, warum es in meinem Fall nicht funktioniert. Ich habe den folgenden Code anzeigen:Django-Formular erstellt neue Instanz anstatt eine vorhandene zu aktualisieren
def edit(request, coffee_id=None):
coffee = get_object_or_404(Drink, pk=coffee_id) if coffee_id else Drink()
if request.method == 'POST':
form = CoffeeForm(request.POST, instance=coffee)
if form.is_valid():
form.save()
return HttpResponseRedirect(urlresolvers.reverse('coffee:index'))
else:
form = CoffeeForm(instance=coffee)
return render(request, 'edit.html', {'coffee_form': form})
Dies soll eine neue Instanz von Kaffee erstellen oder einen neuen zu aktualisieren, wenn in Argumente coffee_id in der Datenbank vorhanden ist.
Aber auch wenn coffee_id in der Datenbank existiert, wird immer eine neue Instanz von Kaffee erstellt.
Ich habe auch versucht, die Kaffee-Instanz zu speichern, ohne das Formular zu speichern, aber es tut das gleiche.
Gibt es etwas, das ich falsch mache? Soll ich etwas Besonderes im Modell einstellen, um ein Update zu ermöglichen?
bearbeiten
Dies ist das Getränk Form
class CoffeeForm(forms.ModelForm):
class Meta:
model = Drink
fields = ('time', 'location', 'type')
def __init__(self, *args, **kwargs):
super(forms.ModelForm, self).__init__(*args, **kwargs)
coffee_category = Category.objects.get(name='coffee')
coffee_drink_types = DrinkType.objects.filter(category=coffee_category.id)
self.fields['type'].choices = ((x.id, str(x)) for x in coffee_drink_types)
Und das Getränk Modell:
class Drink(models.Model):
time = models.DateTimeField('time', default=datetime.datetime.now)
location = models.ForeignKey(Location)
type = models.ForeignKey(DrinkType)
** ** Bearbeiten
die Urls hinzufügen:
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^edit/$', views.edit, name='edit'),
url(r'^edit/(?P<coffee_id>[0-9]*)/$', views.edit, name='edit')
]
Können Sie das CoffeeForm- und das Drink-Modell selbst zeigen? –
Ich habe den Beitrag bearbeitet. Thx – Bertrand
Sind Sie sicher, dass 'coffee_id' an die Ansicht übergeben wird? Kannst du deine URLs zeigen? – Alasdair