Python 在派生字段上查询Django

Python 在派生字段上查询Django,python,django,django-models,django-queryset,Python,Django,Django Models,Django Queryset,使用Django 1.8 我有一个非托管模型,它指向数据库中的一个视图,我正试图返回一个基于派生字段的查询集 以下是模型结构的基本示例: 教材(models.Model): book_id=models.IntegerField() publisher=models.CharField(max_length=20,null=True)#可以加入publisher.publisher_name sku=models.CharField(max_length=15,null=True)#可以加入sk

使用Django 1.8

我有一个非托管模型,它指向数据库中的一个视图,我正试图返回一个基于派生字段的查询集

以下是模型结构的基本示例:

教材(models.Model):
book_id=models.IntegerField()
publisher=models.CharField(max_length=20,null=True)#可以加入publisher.publisher_name
sku=models.CharField(max_length=15,null=True)#可以加入sku.sku
类元:
托管=错误
db_表=‘大众图书’
类别Sku(型号.型号):
sku=models.CharField(最大长度=15)
publisher=models.ForeignKey('myapp.publisher'))
类发布者(models.Model):
publisher\u name=models.CharField(最大长度=20)
region=models.ForeignKey('myapp.region')
类别区域(models.Model):
region_name=models.CharField(最大长度=20)
我正在寻找一种方法,根据地区返回一个图书查询集,从出版商那里作为首选字段,然后返回sku。书中的这些字段可能指的是不同的区域字段,因为数据来自海洋,并且来自多个来源。我可以向Book模型中添加一个方法来导出区域,但是尝试从中获取queryset太慢了

教材(models.Model):
publisher=models.CharField(最大长度=20,null=True)
sku=models.CharField(最大长度=15,null=True)
类元:
托管=错误
db_表=‘大众图书’
def get_区域(自身):
如果不是self.publisher:
如果不是self.sku:
返回“”
尝试:
sku=sku.objects.get(sku=self.sku)
返回sku.publisher.region.region\u名称
除Sku.DoesNotExist外:
返回“”
尝试:
publisher=publisher.objects.get(publisher\u name=self.publisher)
返回publisher.region.region\u名称
除Publisher.DoesNotExist外:
返回“”
区域_dict={}
对于book-in-book.objects.all():
region_dict.setdefault(book.get_region(),[]).append(book.book_id)
Book.objects.filter(Book\u id\u in=region\u dict.get('UK',[]))

我无法向书本模型添加额外字段。有没有更有效的方法可以做到这一点?

我会过滤SKU,然后根据您收到的SKU过滤书籍

skus = Sku.objects.filter(publisher__region__region_name=region).values_list('sku', flat=True)
Book.objects.filter(sku__in=skus)
如果需要,您可以对发布者执行相同的操作,并执行Or查询

 .filter(Q(publisher__in=publishers) |Q(sku__in=skus))