Python Django更新而不是插入新记录
我对Django 1.3有一个奇怪的问题。当我尝试使用ActivityForm添加新活动时,即使我显式创建了一个没有Id的新活动对象,该活动也会经常更新 此外,当my ActivityForm类的init具有显式trip_id参数时,UI将显示Select a valid choice。该选择不是可用的选择之一。用于字段位置,即使显示的选择有效。但是,如果我将其作为可选参数,并从kwargs中弹出它,则不会看到此问题 有人能看看下面的代码,看看我做错了什么吗 forms.py views.pyPython 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
模型实例是可变的。因此,它们决不能像在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,因为我需要触摸多个实体。