django rest框架的元数据生成器

drf-metadata的Python项目详细描述


安装

pip install -e git+https://github.com/night-crawler/drf-metadata.git@#egg=drf-metadata

型号

classAuthor(models.Model):name=models.CharField(max_length=255)birth=models.DateField('birth date')def__str__(self):returnself.nameclassPublisher(models.Model):name=models.CharField(max_length=255)state=models.PositiveSmallIntegerField('publisher state',choices=((0,'Active'),(1,'Disabled')),default=1)def__str__(self):returnself.nameclassBook(models.Model):title=models.CharField(max_length=255)authors=models.ManyToManyField(Author)publisher=models.ForeignKey(Publisher)

用法

fromdrf_metadata.metaimportMetaData,AbstractField,CustomMetadataclassBookMetadata(MetaData):model=Bookserializers={'publisher':PublisherSerializer}update_fields={'authors':{'omg':{'lol':1}}}# skip serialization (don't include model instances to choice field)dataset_urls={'authors':'/author/','publisher':'/publisher/',}# custom queryset for instance (self has `obj` if you need to filter qs)defget_authors_queryset(self,field):returnAuthor.objects.filter(name='author0')# use custom serializer for field instance(s)defget_authors_serializer(self,field):# self.request, self.view, self.obj are available in MetaData instancereturnAuthorSerializer# update field bundle with runtime valuesdefupdate_authors_field_meta(field,obj):return{'new':1,'obj':str(obj)}# use own serializerdefget_publisher_field_meta(field,obj):return{'new':1,'obj':str(obj)}

与django rest framework一起使用

# or redefine OPTIONS handlerclassBookViewSet(viewsets.ReadOnlyModelViewSet):@list_route()defdescribe_book(self,request):md=metadata.BookMetadata().determine_metadata(request,self)returnResponse(md)

样品响应

{"title":"book","description":"description","fields":[{"type":"CharField","max_length":255,"name":"title","verbose_name":"title","help_text":"","blank":false,"null":false,"editable":true,"required":true},{"type":"ForeignKey","name":"publisher","verbose_name":"publisher","help_text":"","blank":false,"null":false,"editable":true,"required":true,"data":[{"id":47,"name":"pub0"},{"id":48,"name":"pub1"},{"id":49,"name":"pub2"}]},{"type":"ManyToManyField","name":"authors","verbose_name":"authors","help_text":"","blank":false,"null":false,"editable":true,"required":true,"data":[{"id":37,"name":"author0"},{"id":38,"name":"author1"},{"id":39,"name":"author2"}]}]}

非模型元数据

classImpersonateMetadata(CustomMetadata):title='View site as another user'action_name='Impersonate'fields=(AbstractField(type='ForeignKey',name='user_id',verbose_name='User',data='/data/',required=True),)# method fieldsdefget_superfield(self,request):return{'name':'hero','super':True}defget_lol(self,request):return{'name':'lol','super':False}# update field `user_id`defget_field_user_id(self,field_name,request):return{'lol':1}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从CQ5获取搜索词建议。5指数   java如何创建在一列中嵌入按钮的tableview?   java使用postman为SLACK生成身份验证令牌   java选择具有最大日期休眠的行   java Jenkins在部署SpringMVC JPA webapp MySQL连接时未释放HikariCP   修改JSF UIComponent时未更改java实体属性   java Sprite图像出现拉伸且质量差,无法获得正确的位置GDXLib   java如何将分数正确地分配给玩家?   java如果“private static int”实例变量未初始化,它是否等于零?   java这个LimitedInputStream正确吗?   java如何调用使用JNA返回字符串的Delphi函数?   java JPA更新实体,包括实体列表   java制作流副本的最有效方法是什么?   java无法导入安卓支持IntelliJ项目   java分别乘以负音值和正音值   每秒验证/断言的java JMeter请求数