Условия фильтрации в Python Сериализаторе - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь использовать сериализатор, чтобы получить все места в модели, которые соответствуют логическим условиям в ее модели. Я пытаюсь получить все места, которые соответствуют условию "Спонсируется". Вот что у меня есть:

Модель

class Venue(models.Model):
    venue_name = models.CharField(max_length=500, blank=False)
    venue_photo = models.ImageField(upload_to= ‘venue_photo/', blank=False, default='')
    venue_logo = models.ImageField(upload_to= ‘venue_logo/', blank=False, default='')
    description = models.CharField(max_length=250, blank=True)
    phone = models.CharField(max_length=500, blank=True)
    ratings = models.FloatField(default="0.0", blank=True)
    sponsored_venue = models.BooleanField(default=False)
    signup = models.DateTimeField(default = timezone.now)
    last_signin = models.DateTimeField(default = timezone.now)
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name=‘venue')

Сериализатор

class VenueSerializer(serializers.ModelSerializer):
    venue_logo = serializers.SerializerMethodField()
    venue_photo = serializers.SerializerMethodField()

    opening_hours = OpeningHoursSerializer(
        many=True, source='openinghours_set', read_only=True)

# shows these fields from each venue signed up
    def get_venue_logo(self, venue):
        request = self.context.get('request')
        venue_logo_url = venue.venue_logo.url
        if venue_logo_url:
            return request.build_absolute_uri(venue_logo_url)
        return ""
    def get_venue_photo(self, venue):
        request = self.context.get('request')
        venue_photo_url = venue.venue_photo.url
        if venue_photo_url:
            return request.build_absolute_uri(venue_photo_url)
        return ""
    class Meta:
        model = venue
        fields = ("id", "venue_name", "phone", "street_address", "venue_logo", "venue_photo",
                  "street_address", "city", "state", "zip_Code", "lat", "lng", 'latlng', 'opening_hours', "ratings")

1 Ответ

0 голосов
/ 31 января 2020

Сериализатор отвечает только за процесс сериализации предоставленных вами данных . Вы можете управлять Model QuerySet из того места, где вызывается сериализатор (вероятно, из вида)

Как-то так,

<b>qs = Venue.objects.filter(sponsored_venue=True)</b>
serializer = VenueSerializer(qs, many=True)
serialzed_data= serializer.data 
...