带有 get_or_create 的 Django 表单

标签 django django-forms

我正在使用 Django ModelForms 创建一个表单。我的表格已经设置好了,而且工作正常。

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)

我想要一个表格,有人可以填写它来存放书籍。但是,如果数据库中已经有一本书具有相同的名称、作者和价格,我显然不希望再次添加此记录,因此只想找出它的 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)

谢谢

最佳答案

我喜欢这种方法:

if request.method == 'POST':
    form = MyForm(request.POST)
    if form.is_valid():
       book, created = Book.objects.get_or_create(**form.cleaned_data)

这样您就可以利用模型表单的所有功能(.save() 除外)和 get_or_create 快捷方式。

关于带有 get_or_create 的 Django 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2297820/

相关文章:

python - Django Forms 和 'tuple' 对象没有属性 'rsplit' 错误

django - 在 Django 中测试 apps.py

python - 为什么我的 "def __str__(self)"函数在 Django 中不起作用

python - Django:如果为空,则将 request.POST 中的值更改为 0

django - 在 django 时间字段中将输入设置为 AM PM

django - 从 Django 十进制 ModelForm 字段中删除向上和向下箭头

python - 使用 Django,代表 Admin 中的外键

Django 分页 "That page contains no results"

python - Django 1.7 - 为定义添加或更改 related_name 参数

python - 单击页面按钮后如何防止 Django 表单被重置