我需要轻松控制在哪个站点上显示哪些产品,并且由于产品很多,我还想通过类别、生产商和标签设置产品站点。因此,如果产品 OR(其类别及其生产者及其一个标签)链接到该站点,我会在该站点上显示该产品。我最终得到的代码如下(简化):
from django.db.models import Model, ManyToManyField, ForeignKey, BooleanField
class Site(Model):
enabled = BooleanField()
class Producer(Model):
sites = ManyToManyField(Site)
class Category(Model):
sites = ManyToManyField(Site)
class Tag(Model):
sites = ManyToManyField(Site)
class Product(Model):
producer = ForeignKey(Producer)
category = ForeignKey(Category)
tags = ManyToManyField(Tag)
sites = ManyToManyField(Site)
def get_site_ids(self):
if self.sites.exists():
return list(self.sites.values_list('id', flat=True))
else:
p = list(self.producer.sites.values_list('id', flat=True))
c = list(self.category.sites.values_list('id', flat=True))
t = sum([list(tag.sites.values_list('id', flat=True)) for tag in self.tags.all()], [])
ids = set.intersection(set(p), set(c), set(t))
return ids
我的问题是如何优化get_sites
方法?是否可以加入一些查询?
更新:我只对将由搜索引擎索引和存储的站点 ID 感兴趣。