透明映射到postgres jsonb的虚拟模型字段

django-janyson的Python项目详细描述


在postgresql的^{tt1}中将其他模型字段存储为json对象$ 字段,并将其作为常规模型字段使用。需要新的 布尔/文本/外键/多对多/等字段?只需添加装饰器 以及模型的字段描述。就这样!别再烦人了 迁徙。

安装

  • 使用pip install django-janyson安装包。
  • janyson添加到INSTALLED_APPS设置。

要求

  • python 2或3(使用2.7+和3.3+进行测试
  • Django 1.9+带Psycopg2

示例

fromdjango.dbimportmodelsfromjanyson.decoratorsimportadd_fieldsfromjanyson.fieldsimportJanySONFieldclassTag(models.Model):name=models.CharField(max_length=16)def__str__(self):return"[Tag: {}]".format(self.name)extra_fields={'desc':{'type':'str'},'qty':{'type':'num','default':0,'use_default':True},'avail':{'type':'nullbool','use_default':True},'main_tag':{'type':'fk','model':Tag},'tags':{'type':'m2m','model':'demo_app.Tag'},}common_options={'use_default':False,'dir_hide':True,}@add_fields(extra_fields,field_options=common_options,janyson_field='extra')classItem(models.Model):name=models.CharField(max_length=64)extra=JanySONField(verbose_name='janyson field',default=dict,blank=True,null=True)def__str__(self):return"[Item: {}]".format(self.name)
>>>fromdemo_app.modelsimportTag,Item>>>Tag.objects.create(name='tag1')>>>Tag.objects.create(name='tag2')>>>item=Item(name='test')>>>item<Item:[Item:test]>>>>item.descAttributeError:'Item'objecthasnoattribute'desc'>>>item.qty0>>>print(item.avail)None>>>item.tagsAttributeError:'Item'objecthasnoattribute'tags'>>>tags=Tag.objects.all()>>>item.desc='description'>>>item.qty=100>>>item.avail=True>>>item.tags=tags>>>item.save()>>>delitem>>>item=Item.objects.get(name='test')>>>item.desc'description'>>>item.qty100>>>item.availTrue>>>item.tags[<Tag:[Tag:tag1]>,<Tag:[Tag:tag1]>,<Tag:[Tag:tag2]>]

测试

python runtests.py [-d TESTDBNAME] [-h HOSTNAME] [-p PORT] [-U USERNAME] [-P PASSWORD]

运行python runtests.py --help获取其他信息。

文档

很快就来。

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

推荐PyPI第三方库


热门话题
相对于框架java窗口的鼠标位置错误   Java 8流peek api   java将数据附加到文件中   java使用ExoPlayer 2.8播放播放列表中的特定文件   JavaSpring国际化:如何动态设置语言环境值   java如何在mysql中实现两个表之间的两个关联   java在gradle可执行jar文件中包含运行时参数   surefire插件中的java maven多套测试套件   java试图理解堆分析以确定内存泄漏或所需的大量内存   java识别字符串有数字   数组如何解决错误“java.lang.ArrayIndexOutOfBoundsException:5”   java Swt文件对话框选择的文件太多?   java此登录代码易受SQL注入攻击吗?   Java[3]中的文件<identifier>预期编译错误   java如何在spring webflux中发送列表   jar中未找到java文件异常   如何在java中合并2D数组?   java如何评测本机JNI库