django查询设置了多个模型

时间:2015-02-15 18:42:06

标签: python django

我正在django中搜索,我无法找到是否能够在该查询集的结果中在同一个应用中使用两个不同的模型。

例如。我正在进行搜索,但字段authorstitle来自不同的模型我应该在第results = Books.object...行做什么,其中Books是模型名称。 我的原意见:

from django.db.models import Q
from django.shortcuts import render_to_response 
from bills.models import *

def search(request):
    query = request.GET.get('q', '')
    if query:
        qset = (
            Q(expenses__rate_of_pure__icontains=query) |
            Q(expenses__customer_id__icontains=query) |
            Q(Choice__carat__icontains=query)  |
            Q(Choice__labour_cost__icontains=query)  |
            Q(Choice__item__icontains=query)  |
            Q(Choice__weight__icontains=query)
        )
        results = expenses.objects.filter(qset).distinct()   
    else:
        results = []
    return render_to_response("bills/search.html", {"results": results,
                                              "query": query})

和模型是:

from django.db import models
from front.models import category
class expenses(models.Model): 
    purchase_order_no = models.IntegerField(max_length=3,\
                                            primary_key=True)  
    rate_of_pure = models.IntegerField(max_length=15)
    voucher = models.IntegerField(null=True)
    customer_id = models.ForeignKey(category)
    def __unicode__(self):
        return'%s' % (self.purchase_order_no)

class Choice(models.Model):
    customer_id  = models.ForeignKey(expenses, unique=False, blank=True,  
    null=True) 
    carat = models.IntegerField(max_length=2)
    item = models.CharField(max_length=25) 
    weight = models.FloatField(max_length=10) 
    labour_cost = models.IntegerField(max_length=10)

我想问的是在第16行的视图中,我必须给出模型的名称,我应该给出模型,因为我正在使用模型的两个部分。

1 个答案:

答案 0 :(得分:0)

你可能正在寻找这个

results = Book.objects.filter(qset).distinct().values('authors', 'title')  

QuerySet.values只会返回您要查找的字段,在这种情况下会返回title与关联的authors。 (https://docs.djangoproject.com/en/1.7/ref/models/querysets/#django.db.models.query.QuerySet.values