Dfr TypeError: неподдерживаемый тип(ы) операнда для +: 'Office' и 'str'
Я пытаюсь конкатенировать некоторые поля ex. Когда я делаю это в postman
{
"sem": "2",
"sy": "2021-2022",
"remarks": "test",
"resolution": "test",
"studid": "2012-5037"
}
вот пользователь, которого я создал
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.