【问题标题】:Django creates two model instances instead of oneDjango 创建两个模型实例而不是一个
【发布时间】:2021-05-20 22:22:45
【问题描述】:

我正在尝试按照 youtube 上的一篇教程学习一些 django 基础知识,当我尝试使用表单创建一些模型实例时得到了奇怪的结果。 Django 隐式创建了两个重复的实例。 这是我的看法:

from django.shortcuts import render
from .forms import ProductModelForm
from .models import Product

def create(request):
    form = ProductModelForm(request.POST or None)
    if form.is_valid():
        obj = form.save(commit=False)
        data = form.cleaned_data
        Product.objects.create(title_text=data.get("title_text"))
        obj.save()
    return render(request, "test_app/create.html", {"form": form})

表格:

from django import forms
from .models import Product

class ProductModelForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = [
            "title_text",
        ]

还有一个模板:

{% block content %}

<form action="." method="post">{% csrf_token %}

    {{ form }}
    <button type="submit">Save Model</button>

</form>

{% endblock %}

提前致谢。

【问题讨论】:

    标签: python django django-forms django-managers


    【解决方案1】:
    obj = form.save(commit=False)
    

    首先创建一个实例。

    obj.save()
    

    然后这会创建另一个实例。

    【讨论】:

    • obj = form.save(commit=Falseobj.save() 一起创建一个对象。第二个对象是由Product.objects.create(title_text=data.get("title_text")) 创建的
    • 谢谢。希望再次见到你。
    • @AlexStelmakh 是的,这不是正确的答案。接受的应该是来自 DilIsPickle 的那个
    • @gdef_ 这是第一个,它为我完成了这项工作。也许不是那么全面,但无论如何。
    【解决方案2】:

    这会创建一个对象

    obj = form.save(commit=False) 
    obj.save()
    

    这会创建一个对象

    data = form.cleaned_data
    Product.objects.create(title_text=data.get("title_text"))
    

    试试这个

    obj = form.save(commit=False)
    data = form.cleaned_data
    obj.title_text = data.get("title_Text")
    obj.save()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 2023-02-11
      • 2011-01-27
      相关资源
      最近更新 更多