python – Django REST序列化程序和自定义模型字段的额外属性
如何将自定义模型字段中的额外属性传递给序列化程序?
例如,我有这个自定义模型字段RsTestField,它有一个额外的属性“info”,它是True或False: class RsTestField(models.Field): __metaclass__ = models.SubfieldBase def get_internal_type(self): return "CharField" def __init__(self,info=False,*args,**kwargs): self.info = info super(RsTestField,self).__init__(*args,**kwargs) def is_info(self): return self.info 在以下模型中使用哪个,我可以传递此自定义属性的值: class Client(models.Model): test1 = RsTestField(max_length=255,info=True,default="") name1 = models.CharField(max_length=255,default="") 以下序列化器: class ClientSerializer(serializers.HyperlinkedModelSerializer): test1 = ModelField(model_field=Client()._meta.get_field('test1')) class Meta: model = Client fields = ('name1','test1') 我希望能够访问test1-info属性,就像我能够访问name1-max_length属性一样. 这可能吗? 目标是最终在Scheme概述中传递此属性,可以使用OPTIONS http请求检索该属性: "actions": { "POST": { "name1": { "type": "string","required": false,"read_only": false,"label": "Client name 1","max_length": 255 },"test1": { "type": "field","required": true,"label": "Test1" } } } 在“test1”中应该有一个额外的关键: "info": True 解决方法
问题1:
是的,您可以通过ModelField.model_field.info访问您的info属性. 问题2为您的最终目标: 我认为您可以自定义自己的元数据类. from rest_framework.metadata import SimpleMetadata from rest_framework.serializers import ModelField from pbweb.models import RsTestField class MyMetadata(SimpleMetadata): def get_field_info(self,field): field_info = super(MyMetadata,self).get_field_info(field) # I will add the info field only for RsTestField-ModelField if isinstance(field,ModelField) and isinstance(field.model_field,RsTestField): # access your info attribute HERE field_info['info'] = field.model_field.info return field_info 并且,不要忘记配置您的DEFAULT_METADATA_CLASS设置 settings.py REST_FRAMEWORK = { 'DEFAULT_METADATA_CLASS': 'my.customize.MyMetadata' } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |