如何在django中发布带有空字段的数据?

d6kp6zgx  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(315)

我正在尝试有一个源类,它接受来自djangoèu的项目、概要文件、部门或团队作为autoonetoone字段。基本上,我尝试访问sourceid和源类型(project、profile、department或team),然后发送到另一个类:posts。当我尝试为其他字段添加配置文件为“s”且为空的源时,如下所示:

我收到以下错误消息:

我试过添加一个默认值=,但这是违反直觉的,无论如何都不起作用。这是我的源类:

class Source(models.Model):
    profile = AutoOneToOneField('Profile', on_delete=models.CASCADE, null=True, blank=True)
    project= models.OneToOneField('Project', on_delete=models.CASCADE, null=True, blank=True)
    team = AutoOneToOneField('Team', on_delete=models.CASCADE, null=True, blank=True)
    department = AutoOneToOneField('Department', on_delete=models.CASCADE, blank=True, null=True)

    def __str__(self):
        return self.profile + self.project + self.team + self.department
z6psavjg

z6psavjg1#

问题是我在def str中使用了超过1个加号,所以要解决这个问题,我所做的只是将其切换到以下位置:

def __str__(self):
        return str(self.id)
0sgqnhkj

0sgqnhkj2#

问题在于 Source 模型 __str__() 方法,其中您尝试将其所有字段添加到一起,但它们不是字符串,并且无法连接。您可以先将每个字段转换为一个字符串,但根据您的模型描述,四个字段中的三个字段 None 的。
如果要在中选择唯一的非空字段 Source 并返回其字符串表示形式:

def __str__(self):
    return str(self.profile or self.project or self.team or self.department)

如果要将相同的选择条件重新用于其他目的,可以首先将其作为自定义特性添加到模型中:

@property
def obj(self):
    return self.profile or self.project or self.team or self.department

def __str__(self):
    return str(self.obj)

然后可以将唯一的非空字段作为 Source 对象,以获取其id或类型(如您所述)。

相关问题