最も便利なdjangoフレームワークの1つについて少し質問します。
django.contrib.sites
私がモデルを持っていると仮定すると:
class MyModel(models.Model):
info = models.TextField()
site = models.ManyToManyField(Site)
objects = models.Manager()
on_site = CurrentSiteManager()
上記にリンクされている別のモデル:
class MyModelSupplement(models.Model):
info = models.TextField()
parent_model = models.ForeignKey(MyModel)
スキームは、MyModelSupplementがサイトに属することはできず、その親はに属さないことを指定しています。
この構造を使用すると、呼び出すだけで、指定されたサイトのMyModelオブジェクトにアクセスできます。
MyModel.on_site.all()コード。MyModelSupplementモデルで同じことを達成するための最良の方法は何ですか?
私はこれを解決するためのいくつかの方法を考えることができます:
- MyModelSupplementに同じサイトフィールドを配置し、同じCurrentSiteManagerを定義します(少し冗長になりませんか?)
- 使用する
MyModelSupplement.objects.filter(parent_model__site__id = some_site_id)
MyModel.on_site.all().values_list('mymodelsupplement')
my_models = MyModel.on_site.all() my_models_supplements = MyModelSupplements.objects.filter(parent_model__in = my_models).select_related()
上記のタスクを実行するためのより良い方法はありますか?注意は、特定のサイトに関して尊重されているインスタンスを取得しようとして、この両方のモデルに一緒に、または別々にアクセスする必要があるということです。
たぶん、次のように言う方法があります:からのすべてのSiteID値はMyModel
にある必要がありMyModelSupplement
ます。SiteID値がインスタンスから削除された場合は、ManyToMany関係を持つ、尊重されるインスタンスに関連するMyModel
すべての値から削除する必要があります。MyModelSupplements
MyModel
それは達成可能ですか?