Djangoには、「accepted_insurance」というManytoManyフィールドを持つモデルがあります。私は保険プロバイダのリストを含むクエリ文字列でgetリクエストを提出するフォームを持っています。 'クエリ文字列リストのアイテムがManytoManyフィールドリストにある場合、これらのオブジェクトをフィルタリングするよりも、'というクエリを作成しようとしています。 'このためのDjangoクエリのショートカットはありますか?私は 'contains'を使用しようとしましたが、関連フィールドに無効な参照があるというタイプエラーがありました。リストにリストが含まれているかどうかはわかりません。Django - リストの項目がManytoManyフィールドにあるオブジェクトを照会します
models.py
class Provider(models.Model):
title = models.CharField(max_length=255, null=True, blank=True)
first_name = models.CharField(max_length=255, null=True, blank=True)
middle_name = models.CharField(max_length=255, null=True, blank=True)
last_name = models.CharField(max_length=255, null=True, blank=True)
email = models.EmailField(null=True, blank=True)
phone = models.CharField(max_length=40, null=True, blank=True)
extension = models.CharField(max_length=10, null=True, blank=True)
company = models.CharField(max_length=255, null=True, blank=True)
age = models.IntegerField(null=True, blank=True)
about = models.TextField(default='', null=True, blank=True)
position = models.CharField(max_length=255, null=True, blank=True)
cost_per_session = models.CharField(max_length=255, null=True, blank=True)
accepts_insurance = models.BooleanField(default=False)
accepted_insurance = models.ManyToManyField('Insurance', blank=True)
payment_methods = models.ManyToManyField('PaymentMethod', blank=True)
request.GET
http://localhost:8004/directory/?search=timothy&insurance=cigna,aetna,optum_health,united_behavioral,blue_cross_blue_shield
<QueryDict: {'insurance': ['cigna,aetna,optum_health,united_behavioral,blue_cross_blue_shield'], 'search': ['timothy']}>
views.pyクエリ
for param in request.GET:
if param.lower() == 'insurance':
all_providers = all_providers.filter(accepted_insurance__contains=param)
受け入れ保険は2つのタイトル「ブルークロス・ブルーシールド」を持つオブジェクト、及び「シグナ」を持っているのであれば、それは、これらのタイトルの両方が保険辞書にあるかどうかを確認しようとしますか? – JBT
いいえ。accepted_insuranceフィールドのリストにある名前を持つプロバイダと一致します。 –
素晴らしいです、ありがとうダニエル!クエリショートカットの中には、最初は直感的ではないように聞こえるものもありますが、うまくいけば機能します。 – JBT