どのサイトにどの商品が表示されているかを簡単に管理したいのですが、商品が多いので、カテゴリー、生産者、タグで商品サイトも設定したいと考えています。したがって、製品または (そのカテゴリとその生産者とそのタグの 1 つ) がサイトにリンクされている場合、その製品をサイトに表示します。私が最終的に得たコードは次のとおりです(簡略化):
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 だけに興味があります。