Dfr TypeError: неподдерживаемый тип(ы) операнда для +: 'Office' и 'str'

Я пытаюсь конкатенировать некоторые поля ex. Когда я делаю это в postman

{
"sem": "2",
"sy": "2021-2022",
"remarks": "test",
"resolution": "test",
"studid": "2012-5037"
}

вот пользователь, которого я создал enter image description here cl_itemid должен быть OSA-2021-2022-2

class ClearanceItemSerialize(serializers.ModelSerializer):
class Meta:
    model = ClearanceItem
    fields = '__all__'

def create(self, validated_data):
    validated_data["office"] = self.context["request"].user.officeid
    validated_data["recorded_by"] = self.context["request"].user.userid
    validated_data["cl_itemid"] = self.context["request"].user.officeid + '-' + validated_data.get('sy') + '-' + validated_data.get('sem')
    return super().create(validated_data)

выше представлен код

но выдает ошибку TypeError: unsupported operand type(s) for +: 'Office' and 'str'

если я использую userid вместо этого

validated_data["cl_itemid"] = self.context["request"].user.userid + '-' + validated_data.get('sy') + '-' + validated_data.get('sem') 

это работает

321-05   2021-2022-2 

Что здесь происходит, кто-нибудь может объяснить?

Edit: Я добавил модели, если проблема в этом

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)

Ошибка ясно говорит, что нельзя конкатенировать строку с экземпляром Office. Поэтому вы должны попробовать использовать self.context["request"].user.officeid.office_id, потому что, скорее всего, в вашей модели клиента есть что-то вроде этого

class Customer(models.model)
...
   officeid = models.ForeignKey('Office', db_column='officeid' ...)

...

Поэтому обращение к user.officeid даст вам весь объект Office.

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