我有一个模型序列化器,我想知道如何获得这个序列化器的字段名称列表。同样,我知道如何从模型和表单中获取字段列表。
示例模型:
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'
型
显然,我忽略了如何使用这个方法,以及是否有其他方法。
2条答案
按热度按时间emeijp431#
你必须在序列化程序的示例上调用方法(而不是类本身):
字符串
4smxwvx52#
我发现这个使用序列化器类的单行程序,它对我来说很好:
字符串
注意:我发现SofienM的方法可以给予更多的对象信息。