我使用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