gpt4 book ai didi

python - Django 更新而不是插入新记录

转载 作者:太空宇宙 更新时间:2023-11-04 07:24:01 24 4
gpt4 key购买 nike

我在使用 Django 1.3 时遇到了一个奇怪的问题。当我尝试使用 ActivityForm 添加新的 Activity 时,即使我明确创建了一个没有 Id 的新 Activity 对象,Activity 也会经常更新。

此外,当我的 ActivityForm 类的 init 有一个明确的 trip_id 参数时,UI 会显示“选择一个有效的选择。该选择不是可用的选择之一。”对于字段位置(即使显示的选择有效)。但是,如果我将其设为可选参数并从 kwargs 中弹出它,则不会出现此问题。

有人可以看看下面的代码,看看我做错了什么吗?

表单.py

class DestinationMultipleChoiceField(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.city_name

class ActivityForm(forms.Form):
description = forms.CharField(max_length=100, required=True)
location = DestinationChoiceField(queryset = Visit.objects.none(), empty_label=None, required=True)

def __init__(self, trip_id = None, *args, **kwargs):
super(ActivityForm, self).__init__(*args, **kwargs)
if trip_id is not None:
self.fields['location'].queryset = Visit.objects.filter(trip=trip_id).all().select_related('destination')

# A new Activity() is created if nothing is provided
def save(self, activity = Activity()):
if not self.is_valid():
raise forms.ValidationError('ActivityForm was not validated first before trying to call save().')

activity.visit = self.cleaned_data['location']
activity.description = self.cleaned_data['description']
activity.added_by = User.objects.get(pk=1)
activity.save()

views.py

def add_activity(request, trip_id = None, template_name = 'edit-form.html'):
if request.POST:
form = ActivityForm(trip_id, request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('views.list_trip'))
else:
form = ActivityForm(trip_id)

return render_to_response(template_name, {
'page_title': 'Add',
'form': form,
}, context_instance=RequestContext(request))

最佳答案

看这一行:

def save(self, activity = Activity()):

在 Python 中,默认参数被计算一次;因此,当 save 方法被第一次调用时,一个新的 Activity 将被创建,但后续调用将使用 that 事件

save 更改为如下内容:

def save(self, activity=None):
if activity is None:
activity = Activity()
# Rest of the method

然后,每次调用都会创建一个新的 Activity(如果没有提供一个作为参数)。

关于python - Django 更新而不是插入新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9473303/

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