django - Django:在组合框中显示来自外键模型的值并选择它
问题描述
所以我有以下要求:我需要在 Django 的组合框中显示一个值,即Project Description
具体来说,但我只是想不出正确的方法来渲染它,因为我什么也没看到。这是我的配置:
模型.py
class Project(models.Model):
projectID = models.AutoField(primary_key=True, db_column="Id", db_index=True, verbose_name='Project ID')
description = models.CharField(max_length=900)
def __str__(self):
return str(f'{self.projectID}, {self.description}')
def get_description(self):
return str(self.description)
class PM(models.Model):
PMid = models.AutoField(primary_key=True, db_column="Id", db_index=True)
PMNumber = models.CharField(max_length=50, unique=True, db_column="PMNumber")
description = models.CharField(max_length=600)
projectId = models.ForeignKey(Project, on_delete=models.CASCADE,
db_column="ProjectID", related_name='+')
def __str__(self):
return str(f'{self.PMid}, {self.PMNumber}, {self.description}')
def get_project_description(self):
Project.objects.all().values_list('projectID', 'description')
这些是表格:
表格.py
""" PM Forms """
#Django imports
from django import forms
#Project imports
from pm.models import PM
class PMForm(forms.ModelForm):
"""PMForm"""
class Meta:
model = PM
fields = ('PMNumber', 'description', 'projectId')
这是观点:
视图.py
"""Pm Views """
#Django imports
from django.urls import reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView
#Forms import
from pm.forms import PMForm
#Models import
class CreatePMView(LoginRequiredMixin, CreateView):
template_name = 'pm/new.html'
form_class = PMForm
success_url = reverse_lazy('project:feed')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['user'] = self.request.user
return context
def get_description(self):
return self.request.project.description
这是我试图渲染以显示的 HTML,Project description
但我什么也没看到
<div class="form-group col-md-4" >
<label for="project">Project</label>
<select id="project" class="form-control" name = "projectId" placeholder="Project related">
<option selected>Choose...</option>
<option>
{% for project in form.projectId %}
{{ project.projectId.description }}
{% endfor %}
</option>
</select>
</div>
解决方案
那这个呢:
"""Pm Views """
#Django imports
from django.urls import reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView
#Forms import
from pm.forms import PMForm
#Models import
class CreatePMView(LoginRequiredMixin, CreateView):
template_name = 'pm/new.html'
form_class = PMForm
success_url = reverse_lazy('project:feed')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['user'] = self.request.user
context['projects'] = Project.objects.all() # Add projects to context
return context
def get_description(self):
return self.request.project.description
然后
<div class="form-group col-md-4" >
<label for="project">Project</label>
<select id="project" class="form-control" name = "projectId" placeholder="Project related">
{% for project in projects %}
{% if project.description == "MyProject" %}
<option value={{project.projectID}} selected>{{project.description}}</option>
{% else %}
<option value={{project.projectID}}>{{project.description}}</option>
{% endif %}
{% endfor %}
</select>
</div>
推荐阅读
- html - 为什么 CSS text-align:left 不能与 Simplebar 一起使用?
- python - 使用 pymongo 将数组插入 mongodb
- c++ - 类公共部分的每一行的含义是什么?
- javascript - 加载与页面加载分开的图像
- node.js - 带有 node js 和 express / ejs 的站点并不总是加载图像
- ml.net - 如何对 ML.NET 预测进行单元测试?
- c++ - Leetcode #33 超过时间限制
- javascript - 在运行时替换字符串中的变量
- javascript - 在 node.js 中使用 websockets 发送消息
- javascript - How to convert an array and an object to enable one-to-one correspondence?