GVKun编程网logo

南迁移期间如何在Django模型类上调用静态方法(django 迁移)

12

以上就是给各位分享南迁移期间如何在Django模型类上调用静态方法,其中也会对django迁移进行解释,同时本文还将给你拓展03-Django模型类、django–从南迁移历史中删除迁移、django

以上就是给各位分享南迁移期间如何在Django模型类上调用静态方法,其中也会对django 迁移进行解释,同时本文还将给你拓展03-Django模型类、django – 从南迁移历史中删除迁移、django模型类、java – 在类上调用静态方法?等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

南迁移期间如何在Django模型类上调用静态方法(django 迁移)

南迁移期间如何在Django模型类上调用静态方法(django 迁移)

我正在南部进行数据迁移,以修复我在早期代码中搞砸的一些非规范化数据。找出错误字段的正确值的方法是在Django模型类上调用静态方法。代码如下:

class Account(models.Model):    name = models.CharField()    @staticmethod    def lookup_by_name(name):        # There''s actually more to it than this        return Account.objects.get(name=name)class Record(models.Model):    account_name = models.CharField()    acct = models.ForeignKey(''Account'')

class Migration(DataMigration):    def forwards(self, orm):        # Fixing Records with the wrong FK to Account        for record in orm.Record.objects.all():            record.acct = orm.Account.lookup_by_name(record.account_name)            record.save()

但这失败了

AttributeError: type object ''Account'' has no attribute ''lookup_by_name''

我猜南方@staticmethod在模型类上不支持s吗?

尝试直接导入Account失败,除非我也直接导入Record并完全忽略ORM对象。这是一个安全的选择,因为它是数据迁移并且架构没有更改?还是我应该手动运行此修复程序,而不是在向南迁移的情况下。

答案1

小编典典

在向南迁移中,不能使用来自models.py的方法。原因是在将来,models.py将会发展,您迟早会删除这些方法,然后迁移就会中断。

您应该将迁移所需的所有代码放入迁移文件本身。

03-Django模型类

03-Django模型类

ORM框架:对象-关系-映射

将面向对象语言程序中的对象自动持久化到关系数据库中。本质就是将数据从一种形式转换到另外一种形式
O表示Object 对象类
R表示Relations 关系,关系数据库中的表
M表示Mapping 映射,它的作用就是建立O和R之间的联系
通过类和对象操作数据库表,不需要写sql语句
在Django中已经内置了ORM框架,这个框架将类和数据表进行对应起来,只需通过类和对象就可以对数据表进行操作,也可以通过设计的模型类生成数据库中的表

模型类

1. 设计模型类
from django.db import models

# Create your models here.

class BookInfo ( models.Modeles ): """ 图书模型类 1.图书名称,CharField 说明是一个字符串,max_length字符串的最大长度,与数据库表对应 2.出版日期,DateField是一个日期类型 数据里表里还有一个主键id,id在Django里会自动生成,不需要定义 """ btitle = models.CharField ( max_length=20 ) bpub_date = models.DateField () 
2、根据模型类生成表
  • 生成迁移文件,迁移文件是根据模型类生成的, 使用命令 python manage.py makemigrations

  • 执行迁移文件生成表,使用命令 python manage.py migrate

Django项目默认使用的数据库是sqlite3,可以在settings里看到,在项目下会生成一个db.sqlite3,如何打开?

1)安装
   sudo  apt-get  install sqliteman

2)输入命令sqliteman 回车就会打开 3)File--open,选择db.sqlite3文件打开 

根据模型类生成的表,表名是应用名_模型类名小写

3、根据模型类操作数据库表的增删改查

进入项目的shell环境
命令:python manage.py shell

  • 向表里插入数据

from booktest.models import BooKInfo # 应用名 类名
b=BookInfo() # 定义一个BookInfo类对象
b.btitle=''红楼梦'' # 定义b对象的属性并赋值
from datetime import date
b.bpub_date = date(1990,1,1) # 定义出版日期
b.save()

  • 查表里的数据

b2=BookInfo.objects.get(id=1)
type(b2)
b2.btitle # 回车显示 红楼梦

  • 更新数据库表

b2.bpub_date=date(1990,10,10)
b2.save()

  • 删除数据

b2.delete()

4、模型类关系和关系查询

(多表之间有关联)

# 人物类
# 人物名 hname
# 性别 hgender # 年龄 hage # 关系属性 hbook 建立图书类与人物类之间的一对多的关系 的属性 class HeroInfo(models.Models): hname=models.CharField(max_length=20) # default 指定默认值,False代表男 hgender=models.BooleanFiled(defalut=False) hbook=models.ForeignKey(''BookInfo'') # 建立两表之间的关联 

-->生成迁移文件-->根据迁移文件生成表,hbook在生成的表后,表里的字段对应为hbook_id,固定格式:关系属性名_id
-->插入数据

from booktest.models import BooKInfo,HeroInfo b = BookInfo()
b.btitle=''红楼梦''
from datetime import date
b.bpub_date = date(1990,1,1)
b.save()
h = HeroInfo()
h.hname=''林黛玉''
h.hgender=True
h.hbook_id = b # 指定book表里的主键id
h.save() h2=HeroInfo() # 在增加一条数据
h2.hname=''贾宝玉''
h2.hbook=b
h2.save()

django – 从南迁移历史中删除迁移

django – 从南迁移历史中删除迁移

我有一个名为’机器人’的应用程序并使用它的0.9版本

我后来发现0.9有一个我不想要的功能,并降级到0.8

过了一段时间,我尝试在我的项目上进行南迁移并遇到错误
south.exceptions.NoMigrations:来自’/home/ubuntu/virtualenvs/codingqna/local/lib/python2.7/site-packages/robots/__init__.pyc’\u0026gt;’的应用程序’< module''robots''没有迁移. 我猜0.9有迁移文件,但0.8没有,南方抱怨它. 如何从南方的历史中删除它,就像它从未存在过一样? (就像我从头开始使用0.8而没有迁移文件) 或者我可以在这里使用的任何其他方式?

解决方法

delete from south_migrationhistory where app_name=''robots'';

south_migrationhistory表只记录已应用的迁移和尚未应用的内容.由于0.8的机器人没有任何迁移文件,因此可以删除表south_migrationhistory中的任何条目,它不会影响任何其他内容.

django模型类

django模型类

模型类

ORM

 

分享图片

 

 

django中内嵌了ORM框架,ORM框架可以将类和数据表进行对应起来,只需要通过类和对象就可以对数据表进行操作。

在Django中主要是设计类:模型类。

ORM另外一个作用:根据设计的类生成数据库中的表。

模型类设计

在应用models.py中设计模型类。

必须继承与models.Model类。

1)     设计BookInfo类。

2)     设计HeroInfo类。

Models.ForeignKey可以建立两个模型类之间一对多的关系,django在生成表的时候,就会在多端的表中创建一列作为外键,建立两个表之间一对多的关系。

模型类生成表

1)  生成迁移文件

命令:python manage.py makemigrations

 

分享图片

 

 

迁移文件是根据模型类生成的。

2)  执行迁移生成表

命令:python mange.py migrate

根据迁移文件生成表。

生成表名的默认格式:

应用名_模型类名小写

通过模型类操作数据表

进入项目shell的命令:

       python manage.py shell

以下为在相互shell终端中演示的例子:

首先导入模型类:

       from booktest.models import BookInfo,HeroInfo

1) booktest_bookinfo表中插入一条数据。

       b = BookInfo() #定义一个BookInfo类的对象

       b.btitle =‘天龙八部‘ #定义b对象的属性并赋值

       b.bpub_date = date(1990,10,11)

       b.save() #才会将数据保存进数据库

2) 查询出booktest_bookinfo表中id1的数据。

       b = BookInfo.objects.get(id=1)

3) 在上一步的基础上改变b对应图书的出版日期。

       b.bpub_date = date(1989,21)

       b.save() #才会更新表格中的数据

4) 紧接上一步,删除b对应的图书的数据。

       b.delete() #才会删除

5) booktest_heroInfo表中插入一条数据。

       h = HeroInfo()

       h.hname = ‘郭靖‘
       h.hgender = False

       h.hcomment = ‘降龙十八掌’

       b2 = BookInfo.objects.get(id=2)

       h.hbook = b2  #给关系属性赋值,英雄对象所属的图书对象

       h.save()

6) 查询图书表里面的所有内容。

       BookInfo.objects.all()

       HeroInfo.objects.all()

关联操作

分享图片

 

 

1) 查询出id为2的图书中所有英雄人物的信息。

       b = BookInfo.objects.get(id=2)

       b.heroinfo_set.all() #查询出b图书中所有英雄人物的信息

java – 在类上调用静态方法?

java – 在类上调用静态方法?

说,我有一个Class对象的引用,SomeType有一个静态方法.有没有办法调用该方法不实例化SomeType?最好不要逃脱强打字.

编辑:好的,我搞砸了

interface Int{
    void someMethod();
}

class ImplOne implements Int{
    public void someMethod() {
        // do something
    }
}

Class<? extends Int> getInt(){
    return ImplOne.class;
}

在这种情况下,someMethod()不能是静态的.

解决方法

根据定义,静态方法是在类上调用的,而不是在该类的实例上调用.

所以如果你使用:

SomeClass.someStaticmethod()

你没有实例化(离开类加载和实例化SomeClass类本身,这是JVM处理的,并且超出了你的范围).

这与已经被实例化的对象上调用的常规方法相反:

SomeObject o = someObject; // had to be instantiated *somewhere*
o.someMethod();

关于南迁移期间如何在Django模型类上调用静态方法django 迁移的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于03-Django模型类、django – 从南迁移历史中删除迁移、django模型类、java – 在类上调用静态方法?的相关信息,请在本站寻找。

本文标签: