我应该如何改进这里的样式(python class,Django 模型)?

How should I improve my styling here (python class, Django models)?

我的主要模型class是这样的:

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 看起来像这样:

class ArticleSerializers(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ('id', 'title', 'content', 'authors', 'year'...)

显然,目前将 fields 写成一堆硬编码字符串的方式非常笨拙且容易出错(因为我可能会更改 Article class 中的字段但忘记更新序列化程序中的 fields)。

所以我的问题是,如何改进 fields 的样式?

另外,另外一个问题,这种编码规则/原则叫什么,当你试图让代码的一部分依赖于另一部分时,你需要改变一部分,而不是总是必须记住更改两个部分?

谢谢!

documentation on specifying which fields to include [drf-doc] 说:

You can also set the fields attribute to the special value '__all__' to indicate that all fields in the model should be used.

因此我们可以包含所有字段:

class ArticleSerializers(serializers.ModelSerializer):
    class Meta:
        model = Article
        <b>fields = '__all__'</b>

如果要排除某些字段,可以使用 exclude 选项:

You can set the exclude attribute to a list of fields to be excluded from the serializer.

因此,如果您想排除 tags,您可以使用:

class ArticleSerializers(serializers.ModelSerializer):
    class Meta:
        model = Article
        <b>exclude = ['tags']</b>

Clearly, the current way of writing fields as a bunch of hard-coded strings is very clumsy and prone to mistake

通常情况下,元class 逻辑如果在构造 class 时找不到该字段,则会引发异常,因此当您启动应用。因此,这意味着拼写错误不会导致任何问题。唯一可能出错的是为给定模型指定 另一个 字段。