gpt4 book ai didi

python - Django 表单创建新实例而不是更新现有实例

转载 作者:太空宇宙 更新时间:2023-11-03 16:10:07 27 4
gpt4 key购买 nike

我在这里看到这个问题被问了很多次,但我不明白为什么它在我的情况下不起作用。我有以下查看代码:

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 实例,或者如果数据库中存在参数中给定的 Coffee_id 则更新一个新实例。

但是,即使数据库中存在 Coffee_id,总会创建一个新的 Coffee 实例。

我还尝试在不保存表单的情况下保存咖啡实例,但效果相同。

我做错了什么吗?我应该在模型中设置一些特殊的内容以允许更新吗?

编辑

这是饮料形式

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')
]

最佳答案

调用 super 时,您应该使用 CoffeeForm,而不是 ModelForm

class CoffeeForm(forms.ModelForm):
class Meta:
model = Drink
fields = ('time', 'location', 'type')

def __init__(self, *args, **kwargs):
super(CoffeeForm, self).__init__(*args, **kwargs)

关于python - Django 表单创建新实例而不是更新现有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39399547/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com