改进反向关系的反思,以生成序列化器。
作者: GeeWee创建于 2018年10月18日更新于 2025年11月6日
标签Enhancement
□ 核对表
- 我已核实,这个问题与Django REST框架的 " 主 " 分支存在矛盾。 (从pip对3.9.0进行测试)
- 我搜索过类似问题 公开和关闭的门票, 找不到重复。
- 这不是一个用法问题。 (这些讨论应提交给讨论组。
- 这不能作为第三方图书馆处理。 (我们更希望新的功能[以第三方图书馆的形式](https://www.django-rest-framework.org/topics/ third-party-resources/#about-Terrict-party-packages)在可能情况下使用。 )
- 我把问题简化为最简单的案件。 -我把失败测试列为Pull Request (如果你无法做到这一点,我们仍然可以接受这个问题。 ) (不确定测试是如何在DRF中构建的,但我在代码中包含了一个失败测试)
□ 复制步骤
- 注意到这是2017年可能发生的重复/倒退*
DRF的序列器似乎并不尊重与OneToOne Field相对的倒方. 我不确定这是与这个领域特别, 还是更一般的事情。
采用以下模式 [Python]
型号.py
类位置(模式)。 型号: 通过
类公司(型号)。 型号: 主站位=型号. OneTo One Field(to=Location, null=True, 空白=True, on delete=models.SET NULL,相關的 name="自有 公司").
和以下序列器的位置
```2ZZ
{\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0}序列器
类位置序列器( 序列器. Model 序列器) :
类元 :
型号=位置
字段 = (“id”,“拥有 公司”)我希望发展成果框架正确地认识到,这种关系的反向部分是不需要的。 我希望接下来的测试能通过
类测试定位端点( API TestCase) :
def 测试 位置 can be created( 自己) :
# 应该可以毫无数据地对对象进行即时分析.
序列器 = 位置序列器(数据 = QQ)
序列器.is valid( 提出 例外= True)然而, 它在下列验证失败 : 后备框架,例外 校验错误 : {'own company' : [ErrorDetail(字符串='Dette felt er påkrævet.',代码='需要'] (别介意翻译)
如果我手动在拥有 公司'字段上设置必需=虚假',则没有问题:
这个序列器是好的
类位置序列器( 序列器. Model 序列器) :
拥有 company=序列器. PrimeKey相关领域(要求=虚假,查询集=company.objects.all())
类元 :
型号=位置
字段 = (“id”,“拥有 公司”)□ 预期行为 我期望发展成果框架会注意到这样一个事实,即这个字段在模型中被设定为空白,因此,要求不能被设定为默认。
□ 实际行为 不论模型中空白和无效的价值如何,要求都设定为真实.
内容来源: encode/django-rest-framework