Ошибки формы — обязательное поле

#python #html #django

#python #HTML #django

Вопрос:

Я создаю CRUD-приложение на Django.

Я могу создавать, читать и удалять просто отлично, но функция обновления не работает. Я отредактировал views.py файл (это был шаблон), чтобы напечатать ошибку.

Вот соответствующие фрагменты моего кода:

 #models.py

from django.db import models  

class Item(models.Model):  
    id = models.AutoField(primary_key=True)
    etype = models.CharField(max_length=100)
    etitle = models.CharField(max_length=100)
    eauthor = models.CharField(max_length=100)  
    estatus = models.CharField(max_length=20)  
    class Meta:
        db_table = "Item"
 
 #views.py

...

def edit(request, id):  
    item = Item.objects.get(id=id)  
    return render(request,'edit.html', {'item':item})
    
def update(request, id):
    item = Item.objects.get(id=id)  
    form = ItemForm(request.POST, instance = item) 
    print(form.errors)  
    if form.is_valid():
        try:
            form.save()
        except Exception as e: print(e)
        return redirect("/items/show")
    return render(request, 'edit.html', {'item': item})

...
 

Я предполагаю, что проблема должна быть в edit.html файле, но я не могу понять это.

 #edit.html

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>Index</title>  
    {% load static %}  
    <link rel="stylesheet" href="{% static 'css/style.css' %}"/>  
</head>  
<body>  
<form method="POST" class="post-form" action="http://127.0.0.1:8000/items/update/{{item.id}}">  
        {% csrf_token %}  
    <div class="container">  
<br>  
    <div class="form-group row">  
    <label class="col-sm-1 col-form-label"></label>  
    <div class="col-sm-4">  
    <h3>Update Details</h3>  
    </div>  
  </div>  
  <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Type:</label>  
    <div class="col-sm-4">  
        <input type="text" name="etype" id="id_etype" required maxlength="100" value="{{ item.etype }}" />  
    </div>
  </div>
    <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Title:</label>  
    <div class="col-sm-4">  
        <input type="text" name="etitle" id="id_etitle" required maxlength="100" value="{{ item.etitle }}" />  
    </div>  
  </div>  
    <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Author:</label>  
    <div class="col-sm-4">  
        <input type="text" name="eatuhor" id="id_eauthor" required maxlength="100" value="{{ item.eauthor }}" />  
    </div>  
  </div>  
    <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Status:</label>  
    <div class="col-sm-4">  
        <input type="text" name="estatus" id="id_estatus" required maxlength="20" value="{{ item.estatus }}" />  
    </div>  
  </div>   
  </div> 
    <div class="form-group row">  
    <label class="col-sm-1 col-form-label"></label>  
    <div class="col-sm-4">  
    <button type="submit" class="btn btn-success">Update</button>  
    </div>  
  </div>  
    </div>  
</form>
</body>
</html>
 

P.S: Я новичок как в Django, так и в разработке программного обеспечения, поэтому приветствуется любая обратная связь.

Комментарии:

1. Вы используете форму, но затем самостоятельно выполняете всю разметку. Это значительно усложняет ситуацию. Я бы рекомендовал начать с простого, просто отобразить форму по-своему django с помощью чего-то вроде {{ form.as_p }} , а затем попытаться отправить форму таким образом. Затем Django покажет вам, какие ошибки есть в форме.

Ответ №1:

Я советую вам использовать UpdateView, это действительно проще. Показать здесь Нажмите

Пример views.py

 class ItemUpdate(UpdateView):
    model = Item
    template_name = 'edit.html'

 

Пример edit.html:

 <form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Update">
</form>