Как написать функцию mark_safe для представления, основанного на классе
Я хотел вернуть mark_safe для нижеприведенного API, как я могу это сделать
views.py
class AboutUsViewSet(viewsets.ModelViewSet):
queryset = AboutUs.objects.all()
serializer_class = AboutUsSerializer
def get_permissions(self):
if self.request.method == 'GET':
self.permission_classes = [AllowAny, ]
else:
self.permission_classes = [IsAuthenticated, ]
return super(AboutUsViewSet, self).get_permissions()
serializer.py
class AboutUsSerializer(serializers.ModelSerializer):
class Meta:
model = AboutUs
fields = ('about',)
models.py
class AboutUs(models.Model):
about = models.TextField()
created_date = models.DateTimeField(blank=True, default=datetime.now)
def __str___(self):
return self.about``
я хотел вернуть поле about как mark safe
Существует два способа достижения безопасного отмеченного о.
- используйте сериализатор
SerializerMethodField
class AboutUsSerializer(serializers.ModelSerializer):
safe_about = serializers.SerializerMethodField(method_name='get_safe_about')
class Meta:
model = AboutUs
fields = ('safe_about',)
@staticmethod
def get_safe_about(about_us_instance):
"""Explicitly marking about a string as safe for (HTML) output purposes.
The returned object can be used everywhere a string is appropriate.
"""
return mark_safe(about_us_instance.about)
- Другой путь - добавить метод в модель и затем использовать его в сериализаторе .
Изменения модели
class AboutUs(models.Model):
about = models.TextField()
created_date = models.DateTimeField(blank=True, default=datetime.now)
def __str___(self):
return self.about
def get_safe_about(self):
"""Explicitly marking about a string as safe for (HTML) output purposes.
The returned object can be used everywhere a string is appropriate.
"""
return mark_safe(self.about)
Изменения в сериализаторе
class AboutUsSerializer(serializers.ModelSerializer):
safe_about = serializers.ReadOnlyField(source='get_safe_about')
class Meta:
model = AboutUs
fields = ('safe_about',)
Надеюсь, это поможет многим!
Выпьем!