Python Django-如何从数据库表值中创建字段作为下拉列表,然后发回数据库

Python Django-如何从数据库表值中创建字段作为下拉列表,然后发回数据库,python,html,django,forms,Python,Html,Django,Forms,这篇文章是由一个新手发布的,他已经连续一个多星期在处理这两个问题,没有结果,现在我正在寻求专业人士的帮助,以完成以下内容 我有两页。第一页提供对ASSIGNMENTS.ID的搜索。然后将该值传递到第二个页面,在该页面上显示分配的数据。下面,链接到ASSIGNMENTS.ID的所有产品(作为fk)都显示在表中。这很有效 (问题#1请求帮助:)我想将第2页上的PRODUCTS.STATUS_CODE字段作为表中数据值的下拉列表 这将允许用户通过从下拉列表中选择另一个值来更改PRODUCT.STATU

这篇文章是由一个新手发布的,他已经连续一个多星期在处理这两个问题,没有结果,现在我正在寻求专业人士的帮助,以完成以下内容

我有两页。第一页提供对ASSIGNMENTS.ID的搜索。然后将该值传递到第二个页面,在该页面上显示分配的数据。下面,链接到ASSIGNMENTS.ID的所有产品(作为fk)都显示在表中。这很有效

(问题#1请求帮助:)我想将第2页上的PRODUCTS.STATUS_CODE字段作为表中数据值的下拉列表

这将允许用户通过从下拉列表中选择另一个值来更改PRODUCT.STATUS_代码的值

(问题#2请求帮助:)PRODUCT.STATUS_代码值更改后,如何编写代码以提交状态_代码值更改后的页面,并将其保存在数据库中

注意:第1页与“cancel\u form\u视图”和“cancel\u form.html”相关

第2页与“取消结果”视图和“取消结果.html”相关

以下是Django文件中的代码

型号.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'
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})
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),
]

视图.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'
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})
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),
]

模板

取消表单.HTML


也许你想看看django模型?您可以加载带有给定实例的表单,显示它,然后在提交时使用form.save()方法将用户所做的更改反映到数据库中?我还不清楚您的问题到底在哪里,因为您没有提供任何错误等@erroinpersona感谢您提出模型表单的建议。请您解释一下“加载给定实例的表单,显示它…”“加载给定实例”是什么意思?如何在模型表单中显示它?谢谢你的耐心。嘿!你可以在这里阅读有关modelform的几乎所有内容:如果你在阅读后有问题,只需问:)如果对我正在寻求帮助的内容感到困惑,请参阅原始帖子中带问题1和问题2的斜体句子。我希望有人能帮忙。非常感谢您的指导。非常感谢。