【问题标题】:How should I improve my styling here (python class, Django models)?我应该如何改进我的样式(python 类、Django 模型)?
【发布时间】:2025-12-27 08:45:06
【问题描述】:

我的主要模型类如下所示:

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 类中的字段但忘记更新fields 中的序列化程序)。

所以我的问题是,如何改善fields 的风格?

另外,另一个问题,当你试图使代码的一部分依赖于另一部分时,这种类型的编码规则/原则称为什么,所以你需要改变一部分,而不是总是不得不记得改变这两个部分吗?

谢谢!

【问题讨论】:

标签: python django django-models coding-style python-class


【解决方案1】:

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

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

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

【讨论】:

    最近更新 更多