Как показать данные при выборе и сохранении

Я новичок в Django. В этом проекте, выбираем название машины и номер операции, после выбора, нужно нажать на кнопку сохранить, после нажатия кнопки, данные должны отображаться в виде таблицы, при нажатии только на кнопку.

Пожалуйста, скажите мне, где я ошибся. Пожалуйста.

urls.py:

urlpatterns = [
   path('upload/',views.upload,name='upload'),
   path('save',views.save_machine,name='save_machine'),
]

views.py:

def upload(request):
    machines = Machine.objects.all()
    return render(request,'usermaster/upload.html',{'machines':machines})

def save_machine(request):
   if request.method == "POST":
      machine_name = request.POST.get('machine_name', '')
      operation_no = request.POST.get('operation_no')
      choiced_machine = Machine.objects.get(machine_name=machine_name, operation_no=operation_no)
      machines = Machine.objects.all()
      return render(request,'usermaster/upload.html',{'machines':machines,'choiced_machine':choiced_machine})

шаблон upload.html

<form action="{% url 'save_machine' %}" method="post">
    {% csrf_token %}
       <select>
           <option>Select Machine Name</option>
           {% for machine in machines %}
           <option name="machine_name">{{ machine.machine_name }}</option>
           {% endfor %}
       </select>
       <br>
       <br>
       
       <select>
           <option>Select Operation Number</option>
           {% for machine in machines %}
           <option name="operation_no">{{ machine.operation_no }}</option>
           {% endfor %}
           </select>
       <br>
       <br>
       <br>
       <input type="submit" value="Save">
   </form>
   
   <tr>
       <td>{{choiced_machine.machine_name}}</td>
       <td>{{choiced_machine.operation_no}}</td>
   </tr>

models.py:

class Machine(models.Model):
    machine_name = models.CharField(max_length=200)
    operation_no = models.IntegerField()

    def __str__(self):
        return self.machine_name

когда я нажал на кнопку сохранения, я получил эту ошибку:

DoesNotExist at /save
Machine matching query does not exist.
Request Method: POST
Request URL:    http://localhost:8000/save
Django Version: 4.0
Exception Type: DoesNotExist
Exception Value:    
Machine matching query does not exist.
Exception Location: C:\Users\Manoj\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\query.py, line 439, in get
Python Executable:  C:\Users\Manoj\AppData\Local\Programs\Python\Python39\python.exe
Python Version: 3.9.5
Python Path:    
['C:\\Users\\Manoj\\Desktop\\sample\\mysite5',
 'C:\\Users\\Manoj\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip',
 'C:\\Users\\Manoj\\AppData\\Local\\Programs\\Python\\Python39\\DLLs',
 'C:\\Users\\Manoj\\AppData\\Local\\Programs\\Python\\Python39\\lib',
 'C:\\Users\\Manoj\\AppData\\Local\\Programs\\Python\\Python39',
 'C:\\Users\\Manoj\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages',
 'C:\\Users\\Manoj\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\win32',
 'C:\\Users\\Manoj\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\win32\\lib',
 'C:\\Users\\Manoj\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\Pythonwin']
Server time:    Thu, 13 Jan 2022 04:50:46 +0000

Вы пытаетесь получить машины до их создания. Вам нужно использовать Machine.objects.get_or_create()


def save_machine(request):
   if request.method == "POST":
      machine_name = request.POST.get('machine_name', '')
      operation_no = request.POST.get('operation_no')
      choiced_machine = Machine.objects.get_or_create(machine_name=machine_name, operation_no=operation_no)
      machines = Machine.objects.all()
      return render(request,'usermaster/upload.html',{'machines':machines,'choiced_machine':choiced_machine})
Вернуться на верх