バックグラウンド:
モデル ユーザーの外部キー && 関連する名前、グループ、およびアクセス許可に基づいて、モデル クエリセットの結果をフィルター処理する方法を知りたいです。これが私がやりたいことの簡単な例です:
- すべての従業員が使用できる社用車があるとします (読み取り専用状態)。
- また、どの従業員も自分の車を使用することを選択できるとしましょう (所有者のみが変更可能)
以下にリストされているのは、解決策への最初の刺し傷を伴う上記のシナリオです。
from django.contrib.auth.models import User
from django.db.models import Q
user1 = User.objects.create_user("Billy", 'bbob@gmail.com', 'pw');
user2 = User.objects.create_user("Johnny Boy", 'jbo@gmail.com', 'pw2');
user1.groups.add('employee')
user2.groups.add('employee')
class Car(models.Model):
name = models.CharField(max_length=200)
color = models.CharField(max_length=50)
carOwner = models.OneToOneField('User')
qObj = Q(carOwner__user_username = user1.username)
for empGroup in user1.groups:
qObj |= Q(carOwner__groups__icontains = empGroup)
transOpts= Car.objects.filter(qObj) #All Transportation Options for given user
質問:
解決策の最初の試みを提供しましたが、そのような状況を処理するための「正しい」方法を知りたいです。これ以上苦労することなく、ここに質問があります:
Q: ユーザーの名前、グループ、権限の組み合わせに基づいてモデルをフィルタリングするにはどうすればよいですか?