python - 如何在 django 中发布带有空字段的数据?
问题描述
我正在尝试拥有一个源类,该类将项目、配置文件、部门或团队作为来自 django_annoying 的 AutoOneToOne 字段。基本上,我试图访问 sourceID 和源类型(项目、配置文件、部门或团队),然后发送到不同的类:帖子。当我尝试为其他字段添加配置文件“s”和 null 的源时,如下所示:
我收到以下错误消息:
我已经尝试添加一个 default="",但这是违反直觉的,并且无论如何都不起作用。这是我的源类:
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
解决方案
问题在于您试图将其所有字段加在一起的Source
模型__str__()
方法,但它们不是字符串,并且不能连接。您可以先将它们中的每一个转换为字符串,但根据您的模型描述,四个字段中的三个将是None
's。
如果要选择其中唯一的非空字段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 或类型(如您所述)。
推荐阅读
- vuetify.js - 如何在 vuetifyjs 中自定义主题颜色?
- android-architecture-navigation - 通过 Fragment BackPressed 到上一个 Fragment-Navigation 组件
- wordpress - 如何通过帖子ID获取帖子特色图片
- python - 停止程序直到找到一个元素 [Selenium, Python]
- python - Python切片替换:用变量
- reactjs - 传单永远不会加载,使屏幕空白且没有错误
- arrays - HTML5 没有分离两个对象
- android - Android:得到响应“200 ok”但改造失败
- matlab - MATLAB 的 extractBetween 替代元胞数组中的 Octave
- python - 根据各种参数选择div