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