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