Django Ninja 技巧1
2023-10-22 本文已影响0人
alue
最近在项目中逐步使用 Django Ninja 替换传统的 DRF,原因是其写起来更加便捷高效。
一开始,不习惯的是面对下面这种外接关联场景
class A(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE, verbose_name='人员')
打算直接序列化得到 person.name 字段,传统的DRF,能够用
student_name = serializers.CharField(source='student.name', read_only=True)
告诉序列化器。
但是在 Django Ninja 中,官方文档没有给出明确的方法,看上去只能用嵌套式的构建 Schema。
经过一番探索,发现其实也有扁平化的解决方案:
class A(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE, verbose_name='人员')
@property
def student_name (self):
return self.person.name
class ASchema(ModelSchema):
class Config:
model = models.A
model_fields = "__all__"
student_name : str
只用在模型中增加property
属性, 然后在 ModelSchema 中声明即可。