django 更新字段模型字段

Django中模型Model添加JSON类型字段的方法
本文实例讲述了Django中模型Model添加JSON类型字段的方法。分享给大家供大家参考。具体如下:
Django里面让Model用于JSON字段,添加一个JSONField自动类型如下:
class JSONField(models.TextField):
__metaclass__ = models.SubfieldBase
description = "Json"
def to_python(self, value):
v = models.TextField.to_python(self, value)
return json.loads(v)['v']
def get_prep_value(self, value):
return json.dumps({'v':value})
之后就直接为Model定义JSONField类型字段了
class Category(models.Model):
name = fields.MedialNameField()
other= fields.JSONField()
使用很方便:
代码如下:Category.objects.create(name="C1", other=(1,2,3,4,5))
所有可以被json序列化的类型都可以直接赋值给other字段,很方便吧。
希望本文所述对大家的Python程序设计有所帮助。
如果您喜欢本文请分享给您的好友,谢谢!
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)用心创造滤镜
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(389)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'django从数据库中生成model文件。(sql schemas -\> model)',
blogAbstract:' 与遗留数据库整合 转:
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}class IceCreamBar(models.Model):
models.CharField(max_length=200,db_index=True,verbose_name=&名称&)
shell = models.CharField(max_length=100,verbose_name='外皮')
filling = models.CharField(max_length=100,verbose_name='内含')
has_stick = models.BooleanField(default=True,verbose_name='有没有棍')
def __unicode__(self):
return self.title
class Meta:
verbose_name = &冰棒&
verbose_name_plural = &冰棒s&
利用国际化的翻译功能:
from django.utils.translation import ugettext_lazy as _
class KarmaUser(AbstractUser):
karma = models.PositiveIntegerField(_(&karma&),default=0,blank=True)
然后在message里面设置翻译文本即可.
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:20318次
积分:1050
积分:1050
排名:千里之外
原创:88篇
(2)(1)(86)django学习系列之数据库篇
涉及到,肯定是建立好app了。
进入app的目录,看到文件如下:
__init__.py是整个模块的配置,其实也是空的;views.py是视图,以后会用到。还有一个,models.py,它正是今天的主角&&数据模型,或者说数据库层。
这个文件是干什么用的呢?定义数据模型。简单地说,是定义数据库的表和索引的。
比如djangobook给的示例:
from django.db import models
# Create your models here.
class Publisher(models.Model):#每个数据模型都是django.db.models.Model的子类
name =models.CharField(max_length=30)
address =models.CharField(max_length=50)
city =models.CharField(max_length=60)
state_province =models.CharField(max_length=30)
country =models.CharField(max_length=50)
website = models.URLField()
有的读者可能疑问:这不是类吗?对,这就是类,还是模块呢!但是它翻译成数据库语法后大家就明白了。
Publisher模块等同于下面这张表(用Postgresql的CREATE TABLE语法描述):
CREATE TABLE &books_publisher&(
&id& serial NOT NULL PRIMARY KEY,
&name& varchar(30) NOT NULL,
&address& varchar(50) NOT NULL,
&city& varchar(60) NOT NULL,
&state_province& varchar(30)NOT NULL,
&country& varchar(50) NOT NULL,
&website& varchar(200) NOT NULL
定义好数据模型后,接着用命令操作一下。
python manage.py validate
#检查你的模型的语法和逻辑是否正确。如果没问题,你会看到0 errors found。
python manage.py sqlall books #books是app的名称
#生成CREATE TABLE语句
python manage.py syncdb
#创建表和索引
如果有兴趣可以在SQL客户端登录进数据库服务器查看刚才创建的数据表。启动django自带的命令行工具:python manage.py dbshell。
上面只是查看表,接下来讲数据访问。
打开python环境:python manage.py shell。
输入下面的内容:
&&& from books.models import Publisher
&&& p1 =Publisher(name='Michael', address='HEMC', city='Guangzhou',state_province='GD',country='China',website='/')
&&& p1.save()
&&& publisher_list =Publisher.objects.all()
&&& publisher_list
[&Publisher: Publisher object&]
解释一下这段代码:
1.import 模型类,并传入每个字段值将其实例化。
2.调用对象的save()方法,将对象保存到数据库中。此时django会在后台执行一条insert语句。
3.使用属性Publisher.objects从数据库中获取对象。调用Publisher.objects.all()获取数据库中所有的Publisher对象。此时,Django在后台执行一条SELECT SQL语句。
我们可以看到,打印publisher_list时,并没有得到想要的有用的信息:[&Publisher:Publisher object&]。
这个问题很容易解决,只要添加一个方法__str__()到Publisher对象。__str__()方法告诉python怎样把对象当作字符串使用。将上面的代码改成:
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=30)
address =models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province =models.CharField(max_length=30)
country =models.CharField(max_length=50)
website = models.URLField()
def __str__(self):
return self.name #这里返回名字
要注意的是,__str__()必须返回字符串,如果是其他类型,python将会抛出TypeError错误消息&__str__ returned non-string&。
为了让修改生效,先退出python shell,然后再次进入,这时候打印publisher_list就是这样了:
[&Publisher: Michael&]
同时,上面也演示了怎么给django的模型添加行为,也就是定义方法。
插入数据和更新数据
调用对象的save()方法可以插入数据,也可以更新数据,怎么区分呢?请看下面:
&&& p1 =Publisher(name='Michael', address='HEMC', city='Guangzhou',state_province='GD',country='China',website='/')
&&& p1.save()
这时候是插入数据。
但是如果这样:
&&& p1.name = 'ApressPublishing'
就是更新数据了。不用多解释,看实例相信能够看明白。
接下来说数据的具体操作。
1.查找全部前面用过了,就是Publisher.objects.all()方法。
哦,这里解释一下objects。objects其实是对象的管理器,在操作数据的时候可以用它。
2.数据过滤,也就是select部分数据,可以使用filter()方法。
比如&&&Publisher.objects.filter(name=&Apress Publishing&)
当然多个参数也可以,用逗号隔开就可以了。
3.获取单个对象,使用get()方法。
get()方法其实跟filter()是一样的用法,只是如果返回结果是多个对象或者没有返回结果就会抛出异常。
4.数据排序,使用order_by()方法,参数是字段名称,支持多参数。
但是每次都要order_by()一次太麻烦了,程序员应该发扬偷懒精神,缺省排序。
修改模型代码如下:
class Publisher(models.Model):
name = models.CharField(max_length=30)
address =models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province =models.CharField(max_length=30)
country =models.CharField(max_length=50)
website = models.URLField()
def __str__(self):
return self.name
class Meta:
ordering = [&name&]
这个ordering= [&name&]告诉django如果没有提供order_by(),就缺省按名称排序。
5.组合方法。
如果想要将筛选的数据进行排序,怎么办呢?像这样
&&&Publisher.objects.filter(country=&U.S.A.&).order_by(&name&)
将方法串起来就行了。
6.删除对象,调用对象的delete()方法就搞定了。
今天就先写到这里吧。

我要回帖

更多关于 django 增加字段 的文章

 

随机推荐