Как добавить свойства фильтра в модель и сериализатор django rest

У меня есть модель клиента и модель трансляции. Модель клиента содержит поле tag и поле operator_code. Я хотел бы иметь свойство filter, чтобы иметь возможность фильтровать по тегам и или operator_code при создании нового объекта вещания.

models.py

class Broadcast(models.Model):

date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
text = models.TextField(max_length=500)
end_date = models.DateTimeField()

def __str__(self):
    return self.text

class Client(models.Model):
phoneRegex = RegexValidator(regex='^7[0-9]{10}$')
phone = models.CharField(validators=[phoneRegex], max_length=11, unique=True)
tag = TaggableManager()

def __str__(self):
    return self.phone

@property
def operator_code(self):
    
    return self.phone[1:4]

@property
def time_zone(self):
    ru_number = phonenumbers.parse(self.phone, 'RU')
    time_zone = timezone.time_zones_for_number(ru_number)
    return time_zone

Serializers.py

class ClientSerializer(TaggitSerializer, serializers.ModelSerializer):
tag = TagListSerializerField()
time_zone = serializers.SerializerMethodField()
operator_code = serializers.SerializerMethodField()
class Meta:
    model = Client
    fields = '__all__'
    read_only_fields = ('date_created', 'date_modified', 'operator_code', 'time_zone',)

def validate(self, attrs):
    phone_number_exists = Client.objects.filter(phone=attrs['phone']).exists()

    if phone_number_exists:
        raise serializers.ValidationError(detail="phone number exists")
    
    if attrs['phone'][0] != '7':
        raise serializers.ValidationError(detail="phone number must start with 7")
    
    if len(attrs['phone']) != 11:
        raise serializers.ValidationError(detail="phone number must be 11 digits")
    
    return super().validate(attrs)

def get_operator_code(self, obj):
    return obj.operator_code

def get_time_zone(self, obj):
    return obj.time_zone

class BroadcastSerializer(serializers.ModelSerializer):
end_date = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S')
class Meta:
    model = Broadcast
    fields = ['text', 'end_date',]
    read_only_fields = ('date_created', 'date_modified', 'filter_client',)
Вернуться на верх