from django.db import models from rest_framework import permissions, serializers from backend.models.university import University from django.contrib.postgres.fields import JSONField from backend.models.my_model import MyModel, MyModelSerializer, MyModelViewSet from django.contrib.auth.models import User from backend.models.tools import NoDelete, IsOwner class UserData(MyModel): owner = models.OneToOneField(User, on_delete=models.CASCADE) contact_info = JSONField(default=dict) contact_info_is_public = models.BooleanField(default=False) config = JSONField(default=dict) black_list = models.ManyToManyField( University, related_name='+', blank=True) other_data = JSONField(default=dict) class UserDataSerializer(MyModelSerializer): owner = serializers.CharField(read_only=True) def my_pre_save(self): user = self.get_user_in_request() self.override_validated_data({'owner': user}) # we try to recover the correct instance query = UserData.objects.filter(owner=user) if len(query) == 1: self.instance = query[0] class Meta: model = UserData fields = '__all__' NEVER_MODERATE = True class UserDataViewSet(MyModelViewSet): permission_classes = ( permissions.IsAuthenticated, NoDelete, IsOwner ) serializer_class = UserDataSerializer def get_queryset(self): return UserData.objects.filter(owner=self.request.user) # pylint: disable=E1101