改进反向关系的反思,以生成序列化器。

作者: 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.',代码='需要'] (别介意翻译)

如果我手动在拥有 公司'字段上设置必需=虚假',则没有问题: 这个序列器是好的

4zz
类位置序列器( 序列器. Model 序列器) :
拥有 company=序列器. PrimeKey相关领域(要求=虚假,查询集=company.objects.all())

类元 :
型号=位置
字段 = (“id”,“拥有 公司”)

□ 预期行为 我期望发展成果框架会注意到这样一个事实,即这个字段在模型中被设定为空白,因此,要求不能被设定为默认。

□ 实际行为 不论模型中空白和无效的价值如何,要求都设定为真实.

内容来源: encode/django-rest-framework