from django.db import models from rest_framework import 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.utils import get_viewset_permissions, get_moderation_level class UserData(MyModel): moderation_level = get_moderation_level("UserData") 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__' class UserDataViewSet(MyModelViewSet): permission_classes = get_viewset_permissions("UserDataViewSet") serializer_class = UserDataSerializer def get_queryset(self): return UserData.objects.filter(owner=self.request.user) # pylint: disable=E1101