Warm tip: This article is reproduced from stackoverflow.com, please click
django python serializer

Filtering Conditions in Python Serializer

发布于 2020-03-28 23:17:42

I am trying to use a serializer to get all venues within a model that matches a boolean condition in its model. I am trying to get all venues that match the condition is "is Sponsored." Here is what I have so far:

Model

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')

Serializer

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")
Questioner
A True Novice
Viewed
21
Arakkal Abu 2020-01-31 18:01

The Serializer is only responsible for the Serialization process of data you provided. You can control the Model QuerySet from the place where the serializer is called (probably from the view)

Something like this,

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