Я работаю с Django Rest Framework, и мне нужно фильтровать связанные объекты в сериализаторе на основе пользовательских разрешений. В частности, я хочу условно включить или исключить определенные связанные объекты (в данном случае комментарии) в сериализованный ответ в зависимости от отношения пользователя к основному объекту (публикации в блоге).
Для Например, пользователь должен видеть все комментарии, если у него есть особые разрешения (например, быть владельцем или назначенным соавтором записи блога). В противном случае они должны видеть только те комментарии, которые соответствуют определенным критериям (например, одобренные комментарии).
На данный момент я придумал это решение, но не уверен, что оно наиболее эффективное. подход. Как мне решить эту проблему?
# models.py
from django.db import models
from django.contrib.auth.models import User
class Blog(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
owner = models.ForeignKey(User, related_name="owned_posts", on_delete=models.CASCADE)
writers = models.ManyToManyField(User, related_name="written_posts")
class Comment(models.Model):
post = models.ForeignKey(Blog, related_name="comments", on_delete=models.CASCADE)
approved = models.BooleanField(default=False)
text = models.TextField()
# serializers.py
from rest_framework import serializers
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = '__all__'
class BlogSerializer(serializers.ModelSerializer):
comments = serializers.SerializerMethodField()
class Meta:
model = Blog
fields = '__all__'
def get_comments(self, obj):
user = self.context['request'].user
if obj.owner == user or user in obj.writers.all():
# Show all comments if the user is the owner or a writer
comments = obj.comments.all()
else:
# Otherwise, show only approved comments
comments = obj.comments.filter(approved=True)
return CommentSerializer(comments, many=True).data
Подробнее здесь: https://stackoverflow.com/questions/791 ... permission
Фильтрация связанных объектов в сериализаторе DRF на основе разрешения пользователя ⇐ Python
Программы на Python
1730984032
Anonymous
Я работаю с Django Rest Framework, и мне нужно фильтровать связанные объекты в сериализаторе на основе пользовательских разрешений. В частности, я хочу условно включить или исключить определенные связанные объекты (в данном случае комментарии) в сериализованный ответ в зависимости от отношения пользователя к основному объекту (публикации в блоге).
Для Например, пользователь должен видеть все комментарии, если у него есть особые разрешения (например, быть владельцем или назначенным соавтором записи блога). В противном случае они должны видеть только те комментарии, которые соответствуют определенным критериям (например, одобренные комментарии).
На данный момент я придумал это решение, но не уверен, что оно наиболее эффективное. подход. Как мне решить эту проблему?
# models.py
from django.db import models
from django.contrib.auth.models import User
class Blog(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
owner = models.ForeignKey(User, related_name="owned_posts", on_delete=models.CASCADE)
writers = models.ManyToManyField(User, related_name="written_posts")
class Comment(models.Model):
post = models.ForeignKey(Blog, related_name="comments", on_delete=models.CASCADE)
approved = models.BooleanField(default=False)
text = models.TextField()
# serializers.py
from rest_framework import serializers
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = '__all__'
class BlogSerializer(serializers.ModelSerializer):
comments = serializers.SerializerMethodField()
class Meta:
model = Blog
fields = '__all__'
def get_comments(self, obj):
user = self.context['request'].user
if obj.owner == user or user in obj.writers.all():
# Show all comments if the user is the owner or a writer
comments = obj.comments.all()
else:
# Otherwise, show only approved comments
comments = obj.comments.filter(approved=True)
return CommentSerializer(comments, many=True).data
Подробнее здесь: [url]https://stackoverflow.com/questions/79166537/filter-related-objects-in-drf-serializer-based-on-users-permission[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия