问题描述
我的主模型类如下所示:
class Article(models.Model):
title = models.CharField(max_length=120)
content = models.TextField()
authors = models.TextField(max_length=200)
year = models.IntegerField()
form = models.TextField(choices=FORMS)
language = models.TextField(choices=LANGUAGES)
region = models.TextField(choices=REGIONS)
tags = models.TextField()
def __str__(self):
return self.title
而且,为了让我的 api 将后端数据发送到前端,我有一个 serializers
类,如下所示:
class ArticleSerializers(serializers.ModelSerializer):
class Meta:
model = Article
fields = ('id','title','content','authors','year'...)
显然,当前将 fields
写成一堆硬编码字符串的方式非常笨拙且容易出错(因为我可能会更改 Article
类中的字段但忘记更新 { {1}} 在序列化程序中)。
所以我的问题是,如何改进 fields
的样式?
另外,还有一个问题,这种编码规则/原则叫什么,当你试图让代码的一部分依赖于另一部分时,所以你需要改变一部分,而不是总是不得不改变记得改变两个部分吗?
谢谢!
解决方法
documentation on specifying which fields to include [drf-doc] 说:
您还可以将 fields 属性设置为特殊值 '__all__'
以指示应使用模型中的所有字段。
因此我们可以包含所有字段:
class ArticleSerializers(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__'
如果您想排除某些字段,可以使用 exclude
选项:
您可以将 exclude
属性设置为要从序列化程序中排除的字段列表。
例如,如果您想排除 tags
,您可以使用:
class ArticleSerializers(serializers.ModelSerializer):
class Meta:
model = Article
exclude = ['tags']
显然,目前将字段写成一堆硬编码字符串的方式非常笨拙且容易出错
通常,如果元类逻辑在构造类时找不到该字段,则它会引发异常,因此当您启动应用程序时。因此,这意味着拼写错误不会导致任何问题。唯一可能出错的是指定给定模型存在的另一个字段。