我使用Django ModelForms来创建表单。我有我的表单设置,它工作正常。带有get_or_create的Django表单
form = MyForm(data=request.POST)
if form.is_valid():
form.save()
我现在想要的是,虽然表格首先检查是否存在相同的记录。如果是这样,我希望它获得该对象的ID,如果不是,我希望它将其插入数据库,然后给我该对象的ID。这可能使用类似:
form.get_or_create(data=request.POST)
我知道创建窗体时,我可以做
form = MyForm(instance=object)
但是这是行不通的,因为我还是想拥有的情况下不存在的实例反对
编辑:
说我的模型是
class Book(models.Model):
name = models.CharField(max_length=50)
author = models.CharField(max_length=50)
price = models.CharField(max_length=50)
我想要一个有人可以填写的表格来存储书籍。但是,如果在db中已经有一本名称,作者和价格相同的书,我显然不希望再次添加此记录,所以只想查找它的id并不添加它。
我知道在Django中有一个函数; get_or_create这样做,但有什么类似的形式?或者我会做这样的事情
if form.is_valid():
f = form.save(commit=false)
id = get_or_create(name=f.name, author=f.author, price=f.price)
感谢
似乎是一种很好的方法,但并不真正遵循'** form.cleaned_data'位。具体来说,**有什么作用?任何人都可以详述吗? – 2011-07-23 06:46:22
'**'解开字典。请参阅:http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists – 2011-07-24 19:53:43
@rz:感谢您的澄清。 – 2011-07-24 22:20:20