ここでは多くの時間を尋ねましたが、私のケースではうまくいかない理由がわかりません。これは、コーヒーの新しいインスタンスを作成したり、データベースに存在する引数で与えられたcoffee_id場合は、新しいものを更新することになっているDjangoフォームは既存のインスタンスを更新する代わりに新しいインスタンスを作成します
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})
: は、私は、次のビューのコードを持っています。
ただし、coffee_idがデータベースに存在する場合でも、常にコーヒーの新しいインスタンスが作成されます。
フォームを保存せずにコーヒーインスタンスを保存しようとしましたが、同じことがありました。
私が間違っていることはありますか?更新を許可するために、モデルに特別なものを設定する必要がありますか?
編集
これは飲み物フォーム
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)
飲食モデルです:編集**
class Drink(models.Model):
time = models.DateTimeField('time', default=datetime.datetime.now)
location = models.ForeignKey(Location)
type = models.ForeignKey(DrinkType)
**
は、URLを追加します。
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')
]
コーヒーフォームとドリンクのモデル自体を表示できますか? –
投稿を編集しました。 Thx – Bertrand
'coffee_id'がビューに渡されていますか?あなたはあなたのURLを表示できますか? – Alasdair