PyCharm Django form.save()和form.update()重复记录

问题描述 投票:0回答:1

views.py

@login_required()
def acronis_view(request):
    allitems = Acronis.objects.all()
    acroniform_form = acroniform()
    if request.method == 'POST':
        acroniform_form = acroniform(request.POST)
        if acroniform_form.is_valid():
            acroniss = acroniform_form.save(commit=True)
            acroniss.save()
        return redirect('/Verwaltung/Acronis')
    return render(request, 'blog/acr.html', {'acroniform_form': acroniform_form, 'allitems': allitems})

@login_required()
def edit_acronis(request, id):
    item = get_object_or_404(Acronis, id=id)
    if request.method == "POST":
        form = acroniform(request.POST, instance=item)
        if form.is_valid():
            form.save()
            return redirect('/Verwaltung/Acronis')
    else:
        form = acroniform(instance=item)
        return render(request, 'blog/editacronis.html', {'form': form})

================================================ ============

urls.py

path('EditAcronis/<int:id>', views.edit_acronis, name='edit_acronis'),

================================================ ============

blog / editacronis.html

{% extends 'blog/base.html' %}
{% load bootstrap4 %}

<html lang="en">
<meta charset="UTF-8">
<title>{% block supertitle %} Home {% endblock %}</title>
{% block Content %}
    <form class="form-inline, form-row" action="{% url 'blog:acr' %}" method="post">
    {% csrf_token %}
    {% bootstrap_form form %}
    <button type="submit" class="btn btn-success">Update</button>
    </form>
{% endblock %}

================================================ ============

forms.py

类acroniform(forms.ModelForm):

def clean_key(self):
    Key = self.cleaned_data['Key']
    if Acronis.objects.filter(Key_iexact=Key).exists():
        raise forms.ValidationError('Dieser Key ist bereits vergeben')
    return Key

class Meta:
    model = Acronis
    fields = ('KN', 'Key', 'Release')
    labels = {
        'KN': 'Kundennummer',
        'Key': 'Key',
        'Release': 'Release',
    }

如何停止复制?我也尝试过“ update_or_create” ...

python django python-requests
1个回答
0
投票
@login_required()
def edit_acronis(request, id):
    item = get_object_or_404(Acronis, id=id)
    if request.method == "POST":
        form = acroniform(request.POST, instance=item)
        if form.is_valid():
            form = acroniform.save(commit=True)
            form.save()
            return redirect('/Verwaltung/Acronis')
    else:
        form = acroniform(instance=item)
        return render(request, 'blog/editacronis.html', {'form': form})

所以“ commit = True以及commit = False”不起作用。它仍然在重复...

© www.soinside.com 2019 - 2024. All rights reserved.