DRF Как сохранить текущего пользователя

Я пытаюсь сохранить элемент с officeid пользователя, но он выдает ошибку

ValueError: Невозможно присвоить "<CustomUser: admin@gmail.com>": "ClearanceItem.office" должен быть экземпляром "Office".

.

Мой пользователь имеет id 1

пока письмо находится на admin@gmail.com

последний officeid = 'OSA'

вот мой models.py

class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
userid = models.CharField(null=True, max_length=9)
officeid = models.ForeignKey('Office', models.DO_NOTHING, db_column='officeid', blank=True, null=True)

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []

objects = CustomUserManager()

class ClearanceItem(models.Model):
cl_itemid = models.CharField(primary_key=True, max_length=20, default=get_default_id)
studid = models.CharField(max_length=9, blank=True, null=True)
office = models.ForeignKey('Office', models.DO_NOTHING, blank=True, null=True)
sem = models.CharField(max_length=1, blank=True, null=True)
sy = models.CharField(max_length=9, blank=True, null=True)
remarks = models.TextField(blank=True, null=True)
resolution = models.TextField(blank=True, null=True)
resolve = models.BooleanField(default='False', blank=True, null=True)
resolve_date = models.DateField(blank=True, null=True)
resolve_by = models.CharField(max_length=8, blank=True, null=True)
recorded_by = models.CharField(max_length=8, blank=True, null=True)
record_date = models.DateField(auto_now_add = True, blank=True, null=True)

class Meta:
    managed = False
    db_table = 'clearance_item'

class Office(models.Model):
office_id = models.CharField(primary_key=True, max_length=50)
office_name = models.CharField(max_length=200)
office_head = models.CharField(max_length=8, blank=True, null=True)
designation = models.TextField(blank=True, null=True)
office_parent = models.CharField(max_length=50, blank=True, null=True)
deptlogo = models.TextField(blank=True, null=True)

class Meta:
    managed = False
    db_table = 'office'

вот мой views.py

class APIClerkView(generics.ListCreateAPIView):
permission_classes = [IsAuthenticated]
serializer_class = ClearanceItemSerialize

def perform_create(self, serializer):
    serializer.save(office=CustomUser.objects.get(officeid=self.request.user.officeid),
    recorded_by=self.request.user.userid)

Основываясь на моем предыдущем столкновении с этой проблемой, я думаю, что он бросает не фактический officeid, а строку

Как я могу это исправить или любое альтернативное решение

Моя цель состоит в том, чтобы избежать ввода пользователями своего officeid в поле вместе с другими данными.

    {
        "sem": "1",
        "sy": "2022-2023",
        "remarks": "TEST",
        "resolution": "TEST",
        "studid": "2012-5037"
    }

вы можете сделать это так

class APIClerkView(generics.ListCreateAPIView):
     permission_classes = [IsAuthenticated]
     serializer_class = ClearanceItemSerializer

def perform_create(self, serializer):
    try:
       office=CustomUser.objects.get(officeid=self.request.user.officeid)
    except CustomUser.DoesNotExist:
           raise ValidationError({'error':'User does not exist'}
       # you can now do whatever you want with the instance
           
          

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