2017-09-11 7 views
0

私は以下の3つのモデルを持っています。メディアオブジェクトをシリアル化するとき、所有者は必要なようにリストされます。トラフテーブルはis_acceptedの値を保持していますが、私はメディアシリアライザがメディアを受け取った所有者だけを一覧表示するようにしたいと考えています。どのようにこれを達成するための任意のアイデア?DRF:シリアライザフィルタ関連オブジェクトを

モデル:

class Media(models.Model): 
    genre = models.ForeignKey(Genre, blank=True, null=True, db_index=True) 
    owners = models.ManyToManyField(User, through='Usermedia', related_name='owners') 
    title = models.CharField(max_length=45, blank=True) 
    created = models.DateTimeField(auto_now_add=True) 

class Usermedia(models.Model): 
    user = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name='usermedia') 
    media = models.ForeignKey(Media, on_delete=models.CASCADE, related_name='ownership') 
    is_active = models.BooleanField(default=0) 
    is_accepted = models.BooleanField(default=1) 

class User(AbstractBaseUser, PermissionsMixin): 
    email=models.CharField(unique=True, max_length=255) 

シリアライザ

class UserSerializer(serializers.ModelSerializer): 
    email = serializers.EmailField(
     validators=[validators.UniqueValidator(queryset=User.objects.all())] 
    ) 

class MediaSerializer(serializers.ModelSerializer): 
    owners = UserSerializer(many=True, required=False) 
    created = serializers.DateTimeField(read_only=True) 
    genre = serializers.SlugRelatedField(required=True, slug_field='name', queryset=Genre.objects.all()) 

この

答えて

0

私はSerializerMethodFieldを使用して終了を見て、あなたの時間を割いていただき、ありがとうございます。

私のシリアライザは、次のようになります。

class MediaSerializer(serializers.ModelSerializer): 
    owners = SerializerMethodField() 
    created = serializers.DateTimeField(read_only=True) 
    genre = serializers.SlugRelatedField(required=True, slug_field='name', queryset=Genre.objects.all()) 

    def get_owners(self, obj): 
     ownerships = obj.ownership.all() 
     owners = [ownership.user for ownership in ownerships if (ownership.is_active and ownership.is_accepted)] 

     return UserSerializer(owners, many=True).data 

一つの先端は、シリアライザに結果を渡す前に、関連するフィールドをプリフェッチすることを確認することで、または他のシリアライザは、すべてのデータベースに検索をやってますインスタンスを解析します。

関連する問題