@NyxDeveloper

Как изменить сохраненный в базе данных объект модели django, не создавая новый?

Я создаю вьюху для редактирования объектов в таблице контактов, мне нужно добавить такой функционал, чтобы строки в табличке можно было менять по их айдишнику, но вместо этого Django создает новый объект, а не обновляет старый
Сама вьюха
def editContactView(request, key):
    if request.method == 'POST':
        form = EditContactForm(request.POST)
        if form.is_valid():
            contact = Contact.objects.get(id=key)
            if form.cleaned_data['type']:
                contact.type = form.cleaned_data['type']
            if form.cleaned_data['subject']:
                contact.subject = form.cleaned_data['subject']
            if form.cleaned_data['info']:
                contact.info = form.cleaned_data['info']
            contact.save()


Форма в шаблоне
<form class="d-flex" method="post" action="">
                 {% csrf_token %}
                 {{ editContact.KEY }}
                 {{ editContact.subject }}
                 {{ editContact.type }}
                 {{ editContact.info }}
                 <button type="submit" class="btn btn-success">Изменить</button>
             </form>


Форма в forms.py
class EditContactForm(ModelForm):
    class Meta:
        model = Contact
        fields = ['KEY', 'info', 'type', 'subject']
        widgets = {
            'KEY': forms.NumberInput(attrs={
               'placeholder': 'ID',
               'class': 'form-control w-25'
            }),
            'info': forms.TextInput(attrs={
                'placeholder': 'Данные контакта',
                'class': 'form-control w-25'
            }),
            'type': forms.Select(attrs={
                'class': 'form-control w-25'
            }),
            'subject': forms.Select(attrs={
                'class': 'form-control w-25'
            })
        }

    def __init__(self, *args, **kwargs):
        super(EditContactForm, self).__init__(*args, **kwargs)
        self.fields['info'].required = False
        self.fields['type'].required = False
        self.fields['subject'].required = False


Подскажите, что я делаю не так, как мне внести изменения в уже существующий объект?
Удалять старый и присваивать новому его ID я уже пробовал, он не присваивается
  • Вопрос задан
  • 46 просмотров
Решения вопроса 1
@bacon
Открываем доки https://docs.djangoproject.com/en/3.1/topics/forms... и в первом же примере видим различие между формой создания нового объекта и редактированием существующего.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы