Django Обновление базы данных не работает - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь получить запись, которая работает, но она просто не хочет обновлять запись ...

---- forms.py ----

class acroniform(forms.ModelForm):

    def clean_key(self):
        Key = self.cleaned_data['Key']
        if Acronis.objects.filter(id_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',
        }

---- urls.py ----

from django.urls import path
from . import views

app_name = 'blog'
urlpatterns = [
path('EditAcronis/<int:id>', views.edit_acronis, name='edit_acronis'),
]

---- Views.py ----

@login_required()
    def edit_acronis(request, id=None):
        item = get_object_or_404(Acronis, id=id)
        acroniform_form = acroniform(request.POST or None, instance=item)
        if acroniform_form.is_valid():
            item = acroniform_form.save(commit=False)
            item.save(force_update=True)
            return redirect('/Verwaltung/Acronis')
        else:
            form = acroniform(instance=item)
            return render(request, 'blog/editacronis.html', {'acroniform_form': acroniform_form})

---- editacronis. html ----

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

<html lang="en">


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

Что не так с моим кодом?

item.save () не сохраняет или не обновляет запись базы данных ...

Ответы [ 2 ]

0 голосов
/ 24 января 2020
{% extends 'blog/base.html' %}
{% load bootstrap4 %}

<html lang="en">


<meta charset="UTF-8">
<title>{% block supertitle %} Home {% endblock %}</title>
{% block Content %}
<P></P>
    <form class="form-inline, form-row" action="" method="post">
    {% csrf_token %}
    {% bootstrap_form acroniform_form %}
    <button type="submit" class="btn btn-success">Update</button>
    </form>
    <p>Acronis</p>
<P></P>
{% endblock %}
0 голосов
/ 24 января 2020

Попробуйте это.

 class 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',
        }

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

или

 @login_required()
        def edit_acronis(request, id):
            item = get_object_or_404(Acronis, id=id)
            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', {'acroniform_form': acroniform_form})
...