Изображение не отображается в DRF
Я получаю данные сериализатора правильно, но когда я нажимаю на url изображения, он показывает ошибку, даже если изображение правильно сохраняется в каталог. Я не могу понять, в чем здесь проблема. Пожалуйста, подскажите, что нужно сделать, чтобы показать изображение.
models.py:
class TutorProfile(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
travelling_distance = models.CharField(_("Traveling Distance"),max_length=255,null=True,blank=True)
where_tutoring = models.CharField(_("Where Tutoring"),max_length=255,null=True,blank=True)
taken_out_to_store_account = models.BooleanField(_("Taken To Store Credit Card"),default=False)
account_number = models.PositiveIntegerField(_("Account Number"),default=0)
routing_number = models.PositiveIntegerField(_("Routing Number"),default=0)
upload = models.FileField(null=True,
blank=True,upload_to="uploads/%Y/%m/%d",
validators=[FileExtensionValidator( ['pdf','jpg','jpeg','pjp','pjpeg','jfif','png','webp'] ) ])
university = models.CharField(_("University"),max_length=255,null=True,blank=True)
years_of_experience = models.CharField(_("Years Of Experience"),max_length=255,null=True,blank=True)
professional_photo = models.ImageField(upload_to = user_directory_path)
bio_teacher = models.TextField()
tutor_profile_completed = models.BooleanField(default=False)
tutoring_subject = models.ForeignKey(
TutoringSubject, on_delete=models.CASCADE,blank=True, null=True)
tutor_availablility = models.ManyToManyField(
Day)
booking_date = models.CharField(_("Booking Date"),max_length=255,null=True,blank=True)
def save(self, *args, **kwargs):
self.user_type = 'Teacher'
# if self.brief_description_of_child is not Null
if self.bio_teacher:
self.tutor_profile_completed = True
super(TutorProfile, self).save(*args, **kwargs)
def __str__(self):
return self.travelling_distance
serializers.py
class TutorProfileSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault(),source = 'user.username')
image_url = serializers.SerializerMethodField('get_image_url')
class Meta:
model = TutorProfile
fields = '__all__'
def get_image_url(self, obj):
request = self.context.get("request")
return request.build_absolute_uri(obj.professional_photo.url)
viewsets.py
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
class TutorprofileViewSet(ModelViewSet):
serializer_class = TutorProfileSerializer
http_method_names = ["post","delete","get"]
queryset = TutorProfile.objects.all()
def perform_create(self, serializer):
serializer.save(user=self.request.user)
def get_queryset(self):
"""
This view should return a list of all the services
for the currently authenticated user.
"""
_user = self.request.user
return TutorProfile.objects.filter(tutor_profile_completed=True)
urls.py
router.register("tutor_profile", TutorprofileViewSet, basename="tutor_profile")
Я получаю данные правильно. Но когда я нажимаю на url, он не показывает изображение!!!:
Убедитесь, что вы добавили URL ваших медиафайлов в urlpatterns вашего проекта, чтобы вы могли их обслуживать. Для настройки статических файлов, таких как HTML, CSS, JS и изображения, вы можете прочитать документацию .
Я не уверен, что вы правильно настроили параметры MEDIA_URL
и загрузили изображение, но почему бы вам не сделать это вместо этого.
class TutorProfileSerializer(serializers.ModelSerializer):
user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault(),source = 'user.username')
image_url = serializers.ImageField(source='professional_photo')
class Meta:
model = TutorProfile
fields = '__all__'