Django - как создать поле в виде выпадающего списка из значений таблицы базы данных, а затем отправить обратно в базу данных - PullRequest
0 голосов
/ 19 февраля 2020

Это сообщение было опубликовано новичком ie, который работал над этими двумя проблемами более недели безрезультатно, и теперь ищет помощи у профессионалов для достижения sh следующего.

У меня 2 страницы. Первая страница обеспечивает поиск ASSIGNMENTS.ID. Затем значение передается на вторую страницу, где отображаются данные для присвоений. Ниже все ПРОДУКТЫ, связанные с ASSIGNMENTS.ID, как fk, отображаются в таблице. Это прекрасно работает.

(ПРОБЛЕМА № 1, запрашивающая помощь с:) Я хотел бы сделать поле PRODUCTS.STATUS_CODE на странице 2 в виде раскрывающегося списка значений из данных в таблице .

Это позволит пользователю изменить значение PRODUCT.STATUS_CODE, выбрав другое значение из раскрывающегося списка.

(ПРОБЛЕМА № 2, запрашивающая помощь с:) После изменения значения PRODUCT.STATUS_CODE, как мне написать код для отправки страницы с измененным значением STATUS_CODE для сохранения в базе данных.

ПРИМЕЧАНИЕ. Страница 1 относится к «cancel_form_view» и «cancel_form» . html '

Страница 2 относится к' cancel_result_view 'и' cancel_results. html '

Вот код в Django файлах.

MODELS.PY

from django.db import models

class Assignments(models.Model):
    id = models.DecimalField(db_column='ID', primary_key=True, max_digits=9, decimal_places=0)
    name = models.CharField(db_column='NAME', unique=True, max_length=40)

    def __str__(self):
        return self.name

    class Meta:
        ordering = 'name',
        db_table = 'ASSIGNMENTS'

class Products(models.Model):
    id = models.DecimalField(db_column='ID', primary_key=True, max_digits=11, decimal_places=0)
    name = models.CharField(db_column='NAME', max_length=80)
    status_code = models.ForeignKey('ProductStatus', models.DO_NOTHING, db_column='STATUS_CODE')
    assignment = models.ForeignKey(Assignments, models.DO_NOTHING, related_name='productsfor_assignment', db_column='ASSIGNMENT_ID', blank=True, null=True)

    def __str__(self):
        return self.name

    class Meta:
        ordering = 'name',
        db_table = 'PRODUCTS'

class ProductStatus(models.Model):
    code = models.CharField(db_column='CODE', primary_key=True, max_length=10)
    description = models.CharField(db_column='DESCRIPTION', unique=True, max_length=80, blank=True, null=True)

    def __str__(self):
        return self.code

    class Meta:
        ordering = 'code',
        db_table = 'PRODUCT_STATUS'

VIEWS.PY

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from .models import Assignments, Products

def cancel_form_view(request):
    return render(request, 'assignments/cancel_form.html')

def cancel_result_view(request):
    q = request.GET.get('q', None)
    if q:
        assignments_qs = Assignments.objects.filter(id__icontains=q) \
            .prefetch_related('productsfor_assignment')
        context_data = {'assignments': assignments_qs}
        return render(request, 'assignments/cancel_results.html', context_data)
    else:
        # if the query is empty, render the 'cancel_form.html' template again.
        # display an error message in that template.  So, pass a template variable.
        # 'cancel_form.html' will check for the 'error' variable
        return render(request, 'assignments/cancel_form.html', {'error': True})

ШАБЛОНЫ

CANCEL_FORM. HTML

{% extends "base2.html" %}

{% block content %}

<p> CANCEL PRODUCT </p>

<p> Search for the Assignment. </p>

<br><br>
    {% if error %}
        <p style="color: red;">Please submit a search term.</p>
    {% endif %}
    <form action="/cancel-result/" method="get">
        <input type="text" name="q" placeholder="Enter ID here ...">
        <input type="submit" value="Search">
    </form>

{% endblock %}

CANCEL_RESULTS. HTML

{% extends "base2.html" %}

{% block content %}

<h3> ASSIGNMENT to CANCEL product from</h3>

{% if assignments %}
    <ul>
        {% for assignment in assignments %}
        <li><label><b>Assignment ID:</b></label> {{ assignment.id }}</li>
        <li><label><b>Name:</b></label>{{ assignment.name }}</li>
    </ul>
            {% if assignment.productsfor_assignment.exists %}
            <h3>PRODUCTS</h3>the 
                <table>
                    <tr>
                        <th>Prod_ID</th>
                        <th>Status_Code</th>
                        <th>Name</th>
                    </tr>
                </table>

                {% for product in assignment.productsfor_assignment.all %}
                <table>
                    <tr>
                        <td><b>{{ product.id }}</b></td>
                        <td>{{ product.status_code }}</td>
                        <td>{{ product.name }}</td>
                    </tr>
                </table>
                {% endfor %}

            {% endif %}
        {% endfor %}
{% else %}
    <p>No assignments matched your search criteria.</p>
{% endif %}

{% endblock content %}

URL-адреса. PY

from django.urls import path
from . import views

app_name = 'assignments'

urlpatterns = [
    path('cancel-form/', views.cancel_form_view, name='Cancel product'),
    path('cancel-result/', views.cancel_result_view),
]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...