これは私がしばらく考えていた問題であり、私よりも経験豊富な Django 開発者の意見を聞きたいと思っています。たとえば、次のモデルがあります。
class Preference(models.Model):
name = models.CharField(max_length=50, unique=True)
class UserProfile(AbstractUser):
preferences = models.ManyToManyField(Preference, blank=True)
たとえば、嗜好は食べ物に関連している可能性があります。私は牛肉とじゃがいもが好きなので、それらが私の好みになります。
たとえば、好みに少なくとも牛肉とじゃがいもがあるユーザーを見つける最も効率的な方法は何ですか? そこで、牛肉とじゃがいも以外に、アイスクリームとサラダを好みで食べられるユーザーを見つけたいと思います。
オプション 1 (反復):
query = UserProfile.objects.all() # all user objects
for p in preference_list: # preference_list contains beef and potatoes
query = query.filter(preferences__in==p.id)
オプション 2 (DB、疑似コード):
SELECT * from UserProfile WHERE preferences is a superset of preference_list
オプション 2 の方が効率的だと思いますが、Django で実装する方法がわかりません。この問題のモデルをレイアウトする方法に関するアドバイスや意見はありますか?