我見過這個問題在這裏問了很多時間,但我不明白爲什麼它不起作用在我的情況。 我有以下看法代碼: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給存在於數據庫更新一個新的。
但即使數據庫中存在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)
**編輯**
添加網址:
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')
]
您可以顯示CoffeeForm和Drink模型本身嗎? –
我編輯了帖子。 Thx – Bertrand
你確定'coffee_id'被傳遞給視圖嗎?你可以展示你的網址嗎? – Alasdair