[英]Django accessing CHOICES = () from Model
想知道,我有以下模型架构:
class Location(models.Model):
SERVICE_CHOICES = (
('bus_station', 'Bus Station'),
('cafe', 'Café'),
('cinema', 'Cinema'),
('gardens', 'Public Gardens'),
('library', 'Library'),
('public_services', 'Public Services'),
('railway_station', 'Railway Station'),
('restaurant', 'Restaurant'),
('school', 'School'),
('shop', 'Shop'),
('supermarket', 'Supermarket'),
('tourist_attractions', 'Tourist Attractions'),
('transit_station', 'Transit Station'),
('walks', 'Walks'),
('woodland', 'Woodland'),
)
title = models.CharField("Title", max_length=60, default='')
description = models.TextField("Description")
service_type = models.CharField("Service Type", max_length=80, choices=SERVICE_CHOICES, default='public_service')
我只是想知道如何遍历前端模板上的SERVICE_CHOICES元组列表?
{% for service_choice in location.SERVICE_CHOICES %}
?
根据以下建议,我已经在视图中尝试过此操作:
service_types = []
fields = Location._meta.fields()
for field in fields:
if field.choices:
service_types.append(field.choices)
在您的views.py中
def view(request):
...
choices = Location._meta.get_field('service_type').choices
#or
choices = Location.SERVICE_CHOICES
return render(request, 'template.html', { ... 'choices': choices})
您还可以构建标签以从模板获取列表( Django模板标签docs ):
templatetags / tags.py
from django import template
register = template.Library()
@register.assignment_tag
def get_choices(instance, field_name):
return instance._meta.get_field(field_name).choices
template.html
{% get_choices instance 'service_type' as choices %}
{% for item in choices %}
...
{% endfor %}
Location._meta.get_field('service_type').choices
你可以简单地做到这一点
要么
fields = Location._meta.fields()
for field in fields:
if field.choices:
print "%s: %s" % (field.name, field.choices)
要么
Location.SERVICE_CHOICES
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.