如何从Django序列化器中列出字段名

3phpmpom  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(106)

我有一个模型序列化器,我想知道如何获得这个序列化器的字段名称列表。同样,我知道如何从模型和表单中获取字段列表。
示例模型:

class Account(models.Model):
    account_holder = models.CharField(blank=False, max_length=50)
    age = models.IntegerField(blank=False)
    salary = models.DecimalField(blank=False, max_digits=10, decimal_places=2)

字符串
然后,字段列表可以从以下导出:

obj_fields = Account._meta.get_fields()  # as objects
[field.name for field in Account._meta.get_fields()] # as list of strings
# output: ['id', 'account_holder', 'age', 'salary']


从表格:

class AccountForm(forms.ModelForm):
    class Meta:
        fields = '__all__'
        model = Account


表单字段的列表(可能的方法之一,而不会偏离其他主题):

fields = AccountForm.base_fields # as dictionary of objects
[field for field in AccountForm.base_fields.keys()] # as list of strings
# output: ['account_holder', 'age', 'salary']


我有一个序列化器:

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = (
            'id',
            'account_holder',
            'age',
            'salary',
            'age_score',
            'salary_score',
        )


它的字段比模型多一些。但是,例如使用以下命令,它会抛出一个错误:

>>> AccountSerializer.get_field_names()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: ModelSerializer.get_field_names() missing 3 required positional arguments: 'self', 'declared_fields', and 'info'


显然,我忽略了如何使用这个方法,以及是否有其他方法。

emeijp43

emeijp431#

你必须在序列化程序的示例上调用方法(而不是类本身):

serializer = AccountSerializer()
fields = serializer.get_fields().keys()

字符串

4smxwvx5

4smxwvx52#

我发现这个使用序列化器类的单行程序,它对我来说很好:

fields = AccountSerializer.Meta.fields # return a tuple of strings

字符串
注意:我发现SofienM的方法可以给予更多的对象信息。

相关问题