Я пытаюсь найти лучший способ справиться с ситуацией, когда у модели может быть конфиденциальная информация, которую я хочу, чтобы только owner
мог видеть.
Например, магазин ниже:
class Store(models.Model):
owner = models.ForeignKey(Account, on_delete=models.DO_NOTHING)
name = models.CharField(max_length=128)
license= models.CharField(max_length=128)
menu = models.ManyToManyField(Product)
address = models.ForeignKey(Address, on_delete=models.DO_NOTHING, blank=True, null=True)
class StoreSerializer(serializers.ModelSerializer):
owner = AccountSerializer(read_only=True)
menu = ProductSerializer(many=True, read_only=True)
address = AddressSerializer(read_only=True)
class Meta:
model = Store
fields = ('owner', 'name', 'menu', 'address', 'license')
В этом примере я хочу, чтобы все пользователи могли найти магазины, но поле license
должно быть доступно только для CRUD, если пользователь является владельцем этого объекта.
Каково оптимальное решение в этом случае?Мои варианты на данный момент выглядят так:
A) Создайте отдельный сериализатор для типа владельца
B) Превратите лицензию в SerializerMethodField и предоставьте ее оттуда
Iмне интересно, что является лучшей практикой и есть ли другие, более элегантные способы сделать это.