Python 在Django模板中显示外键值
这是我的问题。我是python/django新手(大约2个月)。我有两个表,项目和状态。我有一个从状态指向项目的外键,我希望尝试在项目模板上显示外键(状态)的值,而不是外键的地址 这是我的模特Python 在Django模板中显示外键值,python,django,django-models,django-templates,Python,Django,Django Models,Django Templates,这是我的问题。我是python/django新手(大约2个月)。我有两个表,项目和状态。我有一个从状态指向项目的外键,我希望尝试在项目模板上显示外键(状态)的值,而不是外键的地址 这是我的模特 from django.db import models from clients.models import Clients from django.contrib.auth.models import User from settings import STATUS_CHOICES from dja
from django.db import models
from clients.models import Clients
from django.contrib.auth.models import User
from settings import STATUS_CHOICES
from django.db import models
from clients.models import Clients
from django.contrib.auth.models import User
from settings import STATUS_CHOICES
class Project(models.Model):
client = models.ForeignKey(Clients, related_name='projects')
created_by = models.ForeignKey(User, related_name='created_by')
#general information
proj_name = models.CharField(max_length=255, verbose_name='Project Name')
pre_quote = models.CharField(max_length=3,default='10-')
quote = models.IntegerField(max_length=10, verbose_name='Quote #', unique=True)
desc = models.TextField(verbose_name='Description')
starts_on = models.DateField(verbose_name='Start Date')
completed_on = models.DateField(verbose_name='Finished On')
def __unicode__(self):
return u'%s' % (self.proj_name)
class Status(models.Model):
project = models.ForeignKey(Project, related_name='status')
value = models.CharField(max_length=20, choices=STATUS_CHOICES, verbose_name='Status')
date_created= models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.value
class Meta:
verbose_name = ('Status')
verbose_name_plural = ("Status")
我的观点
@login_required
def addProject(request):
if request.method == 'POST':
form = AddSingleProjectForm(request.POST)
if form.is_valid():
project = form.save(commit=False)
project.created_by = request.user
project.save()
project.status.create(
value = form.cleaned_data.get('status', None)
)
return HttpResponseRedirect('/project/')
else:
form = AddSingleProjectForm()
return render_to_response('project/addProject.html', {
'form': form, 'user':request.user}, context_instance=RequestContext(request))
最后是我的模板:
{% if project_list %}
<table id="plist">
<tr id="plist">
<th>Quote #</th>
<th>Customer</th>
<th>Date</th>
<th>Project Name</th>
<th>Status</th>
<th>Contact</th>
</tr id="plist">
{% for p in project_list %}
<tr id="plist">
<td><a href="/project/{{ p.id }}/view">{{ p.pre_quote }}{{ p.quote }}</a></td>
<td>{{ p.client }}</td>
<td>{{ p.starts_on }}</td>
<td>{{ p.proj_name }}</td>
<td>{{ p.status_set.select_related }}</td>
<td>{{ p.created_by }}</td>
</tr>
{% endfor %}
</table>
{% else %}
<p>No projects available.</p>
{% endif %}
{%if项目\列表%}
引述#
顾客
日期
项目名称
地位
接触
{项目中p的%u列表%}
{{p.client}}
{{p.start_on}}
{{p.proj_name}
{p.status\u set.select\u related}
{{p.created_by}}
{%endfor%}
{%else%}
没有可用的项目
{%endif%}
任何帮助都将不胜感激。谢谢大家! 我猜你的意思是:
<td>{{ p.status_set.select_related }}</td>
{{p.status\u set.select\u related}
这没什么用
select_related
是一项优化功能,它与实际获取或显示相关内容无关。如果您想这样做,您必须遍历p.status\u set的结果。在您的模型中,您已经将此ForeignKey的相关名称定义为“status”。因此,您现在可以使用“status”作为此名称,而不是“set”业务
因为这是一个ForeignKey(manytone)字段,所以不能简单地将字段显示为只有一个值。相反,您需要.all,它将返回指向相关对象的所有状态的查询集。然后您可以迭代这些
相反,如果您知道每个项目只有一个状态,则可以使用OneToOne字段而不是ForeignKey。是的,该位置正好。那么你是说我需要通过p.status\u set.all循环?对不起,我还是新手。是的,因为每个p
都有多个状态。如果这不是您想要的,那么您的模型结构可能是错误的。