【问题标题】:How to post data with null fields in django?如何在 django 中发布带有空字段的数据?
【发布时间】:2023-03-16 16:44:01
【问题描述】:

我正在尝试创建一个源类,它可以将项目、个人资料、部门或团队作为 来自 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

【问题讨论】:

    标签: python django django-models django-rest-framework


    【解决方案1】:

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

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

    【讨论】:

    • 问题不在于加号的数量。问题是试图连接非字符串。我想你可能一直在寻找的是return str(self.profile or self.project or self.team or self.department)。根据您的描述,只有一个选项是非空的,因此 or 条件将返回非空选项,然后将其转换为 str
    • 如果您想将此作为答案发布,我会接受!谢谢@elyas
    【解决方案2】:

    问题出在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 或类型(如您所述)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      相关资源
      最近更新 更多