(Django) Редактирование данных формы, не являющейся ModelForm

В настоящее время у меня есть модель Form (к сожалению, не ModelForm) с данными, которые необходимо редактировать/обновлять. После просмотра многих постов (большинство из которых были связаны с ModelForm), я нашел способ редактировать/обновлять данные формы внутри оболочки Django со следующим синтаксисом:

Drug.objects.filter(drug_id='d61').update(drug_id='d7')

Это сработало внутри оболочки, но когда я сделал то же самое в html-форме, ничего не произошло: данные остались неизменными, ошибка не возникла.

drugs/forms.py

from django import forms


class DrugForm(forms.Form):
    drug_id = forms.CharField(widget=forms.TextInput(attrs={
        'class': 'form-control',
        'id': 'drug_id',
        'data-val': 'true',
        'data-val-required': 'Please enter drug id',
    }))
    name = forms.CharField(widget=forms.TextInput(attrs={
        'class': 'form-control',
        'id': 'name',
        'data-val': 'true',
        'data-val-required': 'Please enter name',
    }))
    updated_date = forms.CharField(widget=forms.DateInput(attrs={
        'class': 'form-control',
        'type': 'date',
        'id': 'update_date',
    }), required=False)

drugs/models.py

from django.db import models


class Drug(models.Model):
    drug_id = models.CharField(max_length=20, unique=True, error_messages={'unique':"This drug id has already been registered."})
    name = models.CharField(max_length=50)
    updated_date = models.DateField(auto_now_add=True, blank=True, null=True)
    def __str__(self):
        return self.name

drugs/views.py

from django.shortcuts import render, redirect
from django.views.generic import ListView
from django.shortcuts import get_object_or_404
from .models import (
    Drug,
)
def update(request, drug_id):  
    drug = get_object_or_404(Drug, drug_id=drug_id)
    drug_id = drug.drug_id
    name = drug.name
    updated_date = drug.updated_date
    if updated_date == '':
        updated_date = None
    Drug.objects.filter(drug_id=drug_id).update(drug_id=drug_id, name=name, updated_date=updated_date)
    return redirect("drug-list") 

templates/drugs/edit_drug.html

{% extends 'base/base.html' %}
{% block title %}Edit Drug{% endblock title %}


{% block content %}
<div class="row">
    <div class="col-lg-12">
        <div class="card">
            <div class="card-header">
                <strong class="card-title">Edit Drug</strong>
            </div>
            <div class="card-body">
                <!-- Credit Card -->
                <div id="pay-invoice">
                    <div class="card-body">
                        <form action="/update/{{drug.drug_id}}/" method="POST" novalidate="novalidate">
                            {% csrf_token %}
                            <div class="form-group">
                                <label for="drug_id" class="control-label mb-1">Drug ID</label>
                                <input type="text" class="form-control" name="drug_id" id="drug_id" value="{{ drug.drug_id }}"/>  
                            </div>
                            <div class="form-group">
                                <label for="name" class="control-label mb-1">Name</label>
                                <input type="text" class="form-control" name="name" id="name" value="{{ drug.name }}"/>  
                            </div>
                                <label for="updated_date" class="control-label mb-1">Updated Date</label>
                                <input type="date" class="form-control" name="updated_date" id="updated_date" value="{{ drug.updated_date }}"/>  
                            </div>
                            <div>
                                <button id="payment-button" type="submit" class="btn btn-lg btn-info btn-block">
                                    <span id="payment-button-amount">SUBMIT</span>
                                </button>
                            </div>
                            <div class="form-errors">{{form.errors}}</div>
                        </form>
                    </div>
                </div>
            </div>
        </div> <!-- .card -->

    </div><!--/.col-->
</div>
{% endblock content %}

ddms/urls.py

from django.contrib import admin
from django.urls import path, include
# local
from .views import dashboard
from drugs.views import edit, update, DrugListView


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', dashboard, name='dashboard'),
    path('drug-list/', DrugListView.as_view(), name='drug-list'),
    path('drugs/', include('drugs.urls')),
    path('update/<drug_id>/', update), 
    path('edit/<drug_id>/', edit), 
]

Я думаю, что проблема может быть внутри формы шаблона edit_drug.html. Я попробовал form.errors, но ничего не отображается. Следующее, что я предполагаю, это, вероятно, views.py, но тот же синтаксис работал в оболочке Django. Я попытался сохранить объект Drug после обновления, но он сказал, что объект int не может быть сохранен!

d = Drug.objects.filter(drug_id='d61').update(drug_id='d7')
d.save() # failed

Не могли бы вы показать мне способ решения этой проблемы? Спасибо!

Вернуться на верх