Как написать функцию 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

Существует два способа достижения безопасного отмеченного о.

  1. используйте сериализатор 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)
  1. Другой путь - добавить метод в модель и затем использовать его в сериализаторе
  2. .

Изменения модели

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

Надеюсь, это поможет многим!

Выпьем!

Вернуться на верх