python - Django:如果相关对象不存在,则从 OneToOneField 返回 'None'?

标签 python django django-models

我有一个这样的 Django 类:

class Breakfast(m.Model):
    # egg = m.OneToOneField(Egg)
    ...

class Egg(m.Model):
    breakfast = m.OneToOneField(Breakfast, related_name="egg")

如果没有与Breakfast相关的Egg,是否可以有breakfast.egg == None

编辑:忘了说:我宁愿不把 related_name 改成 related_name="_egg" 之类的东西,然后有东西喜欢:

@property
def egg(self):
    try:
        return self.egg
    except ...:
        return None

因为我在查询中使用名称 egg,我宁愿不必将查询更改为使用 _egg

最佳答案

这个自定义 django 字段将完全满足您的需求:

class SingleRelatedObjectDescriptorReturnsNone(SingleRelatedObjectDescriptor):
    def __get__(self, *args, **kwargs):
        try:
            return super(SingleRelatedObjectDescriptorReturnsNone, self).__get__(*args, **kwargs)
        except ObjectDoesNotExist:
            return None

class OneToOneOrNoneField(models.OneToOneField):
    """A OneToOneField that returns None if the related object doesn't exist"""
    related_accessor_class = SingleRelatedObjectDescriptorReturnsNone

使用它:

class Breakfast(models.Model):
    pass
    # other fields

class Egg(m.Model):
    breakfast = OneToOneOrNoneField(Breakfast, related_name="egg")

breakfast = Breakfast()
assert breakfast.egg == None

关于python - Django:如果相关对象不存在,则从 OneToOneField 返回 'None'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3955093/

相关文章:

python - Django admin 中的多张图片上传

python - 如何在python中解码ascii

python - 添加 Django 模型约束?

python - 在 Centos 中使用 pip 安装加密 python 库时出错

python - 在 Plotly 中创建 3D 曲面图

python - 我可以将逻辑运算符 "or"与字符串结合使用吗?

django - 在不使用表单的模型上设置字段

python - pybrain黑盒优化自定义优化器模拟退火

django - 调试自定义django管理命令

python - 使用 Django SelectDateWidget 设置默认日期