首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序列表中的外键项

问排序列表中的外键项
EN

Stack Overflow用户
提问于 2013-09-12 10:11:48
回答 1查看 323关注 0票数 0

我有一个客户表单,它将数据保存到一个表列表中,其中有名字、姓氏、电话、电子邮件、地址等。我在列表上有一个排序函数,当点击标题时,它会从A.或Z对该字段进行排序。问题是,我有一个地址字段,它是一个来自不同模型的外键-它不按字母顺序排序,而是使用它们各自的主键(Pk)进行排序。

地址模型包含地址、城市、县、邮政编码和国家,并以下列方式返回到表列表:“街道名称、城市、县、国家”。

排序函数在我的template.mako中:

代码语言:javascript
复制
    <thead>
    <tr>
      <%
        # a list of column field names and labels
        column_fields = (
          ('first_name', 'First Name'),
          ('surname', 'Last Name'),              ,
          ('phone__number', 'Phone'),
          ('email__email', 'Email'),
          ('address', 'Address'),              
        )
        columns = ( {'field':x[0], 'label':x[1]} for x in column_fields )
      %>
      % for column in columns:            
        % if column['field'] == sort_field:
          <th><a href="${self.util.reverse('customers')}?sort=-  ${column['field']}">${column['label']}</th>
        % else:
          <th><a href="${self.util.reverse('customers')}?sort=${column['field']}">${column['label']}</th>
        % endif
      % endfor
    </tr>
  </thead>

电子邮件和电话也是外键,但每个字段都只有一个字段可以从他们的模型中得到(email_email和phone_number)。

总是会有一个县被选中,因为它是一个下拉列表,并且有一个默认值。因此,如果地址/城市字段未提交,我希望能够按县进行排序。然而,如果地址/城市字段已填写完毕,我想按它们进行排序。

你知道怎么把地址排序吗?

我的views.py:

代码语言:javascript
复制
    def customers(request):    
        filtered = False
        sort_field = request.GET.get('sort', 'first_name')

        our_customers = Customer.objects.order_by(sort_field)
        form = SearchForm(request.POST or None, request.FILES or None)    

        if request.method == 'POST' and \
               form.is_valid() and \
               form.cleaned_data['search'] and \
               'clear-searchform' not in request.POST:
            search = form.cleaned_data['search']
            search_list = search.split()
            duplicated_customers = []
            for item in search_list:
            the_customers = Customer.objects.filter(
                Q(slug__icontains=item) |
                Q(first_name__icontains=item) |
                Q(surname__icontains=item) |
                Q(dob__icontains=item) |
                Q(phone__number__icontains=item) |
                Q(email__email__icontains=item) |
                Q(address__address__icontains=item) |
                Q(address__city__icontains=item) |
                Q(address__county__icontains=item) |
                Q(address__postcode__icontains=item) |
                Q(address__country__icontains=item) |
                Q(medical__icontains=item) |
                Q(notes__icontains=item)
                # need to amend so can search by organization
                )
                duplicated_customers = chain(duplicated_customers, the_customers)
                filtered = True
            our_customers = set(duplicated_customers)
        elif 'clear-searchform' in request.POST:
            form = SearchForm()

        dictionary = dict(
                form=form,
                customers=our_customers,
                sort_field=sort_field,
                filtered=filtered,
                display_name=_('Customers'),
                )
       return dictionary

"Q()“用于列表中设置的搜索函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-12 10:54:32

要从ForeignKey模型(例如县)对字段进行排序,请使用用'__‘分隔的外部模型和字段名(双下划线):

代码语言:javascript
复制
customers = Customer.objects.all().order_by('address__county')

https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by

若要有条件地设置排序字段:

代码语言:javascript
复制
if address.city != '':
    sort_field = 'address__city'
else:
    sort_field = 'address__county'
customers = Customer.objects.all().order_by(sort_field)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18761413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档