我正在django中搜索,我无法找到是否能够在该查询集的结果中在同一个应用中使用两个不同的模型。
例如。我正在进行搜索,但字段authors
和title
来自不同的模型我应该在第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行的视图中,我必须给出模型的名称,我应该给出模型,因为我正在使用模型的两个部分。
答案 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)