首页 > 解决方案 > django:按字母顺序对表格数据进行排序

问题描述

我所拥有的是:

模型.py:

class Address(custom_mixins.SiteAwareAbstractModel):
states = State.objects.all()

CHOICES = list()

for state in states:
    CHOICES.append((state.code, state.name))

CHOICES = tuple(CHOICES)
state_name = models.CharField(max_length=80, choices=CHOICES)

然后是状态类

class State(models.Model):
name = models.CharField(max_length=256)
code = models.CharField(max_length=2, null=True)
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now=True)

class Meta:
    ordering = ['-id']

def __str__(self):
    return '{}'.format(self.name)

这将呈现所有状态,因为它们存储在表中。我想要的是按字母顺序显示所有状态。我试着做:

states = State.objects.all().order_by(
    'name').values_list(
    'code', flat=True)

但这引发了错误

CHOICES.append((state.code, state.name)) AttributeError: 'str' object has no attribute 'code'

标签: pythondjangosorting

解决方案


尝试:

states = State.objects.all().values_list('code', 'name', named=True).order_by('name')

for state in states:
    CHOICES.append((state.code, state.name))

有关该values_list方法的更多信息


推荐阅读