我尝试连接一些字段,例如,在postman中执行此操作时
{
"sem": "2",
"sy": "2021-2022",
"remarks": "test",
"resolution": "test",
"studid": "2012-5037"
}
这是我创建的自定义用户x1c 0d1x。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:不支持+的操作数类型:'Office'和'str'***
如果我使用userid
validated_data["cl_itemid"] = self.context["request"].user.userid + '-' + validated_data.get('sy') + '-' + validated_data.get('sem')
它起作用了
321-05 2021-2022-2
这里发生了什么有人能解释一下吗?
编辑:我添加了模型,以防出现问题
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, db_column='office', 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)
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'
Edit 2:我尝试删除customuser到office和clearance_item到office的所有fk及其工作idk为什么
Edit 3:我尝试在validated_data["cl_itemid"] = str(validated_data.get('office'))
中添加字符串
当我检查它的值(Office对象(OSA)1)时,有没有办法只得到OSA部分?
1条答案
按热度按时间kcwpcxri1#
这个错误很清楚地说明了不能将字符串与Office示例连接起来。因此,您应该尝试使用
self.context["request"].user.officeid.office_id
,因为在您的客户模型中很可能会出现类似的情况因此,访问user.officeid将获得整个Office对象。