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 中声明即可。

上一篇 下一篇

猜你喜欢

热点阅读