繁体   English   中英

Django从模型访问CHOICES =()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM