我应该如何改进我的样式python 类,Django 模型?

问题描述

我的主模型类如下所示:

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']

显然,目前将字段写成一堆硬编码字符串的方式非常笨拙且容易出错

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...