Python Django更新而不是插入新记录

Python Django更新而不是插入新记录,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我对Django 1.3有一个奇怪的问题。当我尝试使用ActivityForm添加新活动时,即使我显式创建了一个没有Id的新活动对象,该活动也会经常更新 此外,当my ActivityForm类的init具有显式trip_id参数时,UI将显示Select a valid choice。该选择不是可用的选择之一。用于字段位置,即使显示的选择有效。但是,如果我将其作为可选参数,并从kwargs中弹出它,则不会看到此问题 有人能看看下面的代码,看看我做错了什么吗 forms.py views.py

我对Django 1.3有一个奇怪的问题。当我尝试使用ActivityForm添加新活动时,即使我显式创建了一个没有Id的新活动对象,该活动也会经常更新

此外,当my ActivityForm类的init具有显式trip_id参数时,UI将显示Select a valid choice。该选择不是可用的选择之一。用于字段位置,即使显示的选择有效。但是,如果我将其作为可选参数,并从kwargs中弹出它,则不会看到此问题

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

forms.py

views.py


模型实例是可变的。因此,它们决不能像在save中那样用作方法的默认参数。这就是为什么您从未在任何文档或示例中看到这一点的原因

正如在本网站的许多其他问题中所指出的,默认参数是根据定义而不是执行来计算的。因此,每个不带活动参数的save调用都将使用最初定义的相同活动


但是,我不明白为什么您不使用ModelForm,它在任何情况下都可以为您完成大部分工作。

模型实例是可变的。因此,它们决不能像在save中那样用作方法的默认参数。这就是为什么您从未在任何文档或示例中看到这一点的原因

正如在本网站的许多其他问题中所指出的,默认参数是根据定义而不是执行来计算的。因此,每个不带活动参数的save调用都将使用最初定义的相同活动

但是,我不明白您为什么不使用ModelForm,它在任何情况下都可以为您完成大部分工作。

请看这一行:

def save(self, activity = Activity()):
在Python中,默认参数只计算一次;因此,当第一次调用save方法时,将创建一个新的活动,但随后的调用将使用该活动

将“保存”更改为类似以下内容:

def save(self, activity=None):
    if activity is None:
        activity = Activity()
    # Rest of the method
然后,如果没有作为参数提供活动,则每次调用都会创建一个新的活动。

请看这一行:

def save(self, activity = Activity()):
在Python中,默认参数只计算一次;因此,当第一次调用save方法时,将创建一个新的活动,但随后的调用将使用该活动

将“保存”更改为类似以下内容:

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

然后,如果一个活动未作为参数提供,则每次调用都会创建一个新活动。

我没有使用ModelForm,因为我需要触摸多个实体。我没有使用ModelForm,因为我需要触摸多个实体。