django dfr类型错误:不支持+的操作数类型:“办公室”和“str”

n53p2ov0  于 2022-11-26  发布在  Go
关注(0)|答案(1)|浏览(83)

我尝试连接一些字段,例如,在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部分?

kcwpcxri

kcwpcxri1#

这个错误很清楚地说明了不能将字符串与Office示例连接起来。因此,您应该尝试使用self.context["request"].user.officeid.office_id,因为在您的客户模型中很可能会出现类似的情况

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

...

因此,访问user.officeid将获得整个Office对象。

相关问题