Search code examples
pythondjangodjango-formsdjango-managers

Django creates two model instances instead of one


I'm trying to learn some django basics following one turorial from youtube and have got strange result when I try to create some model instances using forms. Django implicitly creates two duplicate instances. This is my view:

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})

Form:

from django import forms
from .models import Product

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

And a template:

{% block content %}

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

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

</form>

{% endblock %}

Thanks in advance.


Solution

  • obj = form.save(commit=False)
    

    this create one instance first.

    obj.save()
    

    And then this creates another instance.