django 单个models 可以定义多少个表

作者&投稿:营疯 (若有异议请与网页底部的电邮联系)
django可以单独使用Model模块,不使用其他模块吗~

可以不使用,如果你是本地项目,可以只使用django的Model去操作数据库,没有任何问题。

如果解决了您的问题请采纳!
如果未解决请继续追问

Django里面,管理数据库和sqlarchemy类似,也是通过orm框架来实现的。所有的数据库的建立,都是在model.py里面通过类来实现的。
首先看看如何创建一个单表:
a. 先定义一个类,继承models.Model, 然后根据需求定义参数,这些参数的类型和变量后面会进一步阐述
models.py
from django.db import modelsclass UserInfo(models.Model):username = models.CharField(max_length=32)password = models.CharField(max_length=64)
b. 注册app
settings.py
INSTALLED_APPS = [‘django.contrib.admin‘,‘django.contrib.auth‘,‘django.contrib.contenttypes‘,‘django.contrib.sessions‘,‘django.contrib.messages‘,‘django.contrib.staticfiles‘,‘app01‘,]
c.执行命令。 第一条命令会生成一个初始化文件,第二个命令会生成对应的表
python manage.py makemigrationspython manage.py migrate

这样,就在PyCharm自带的sqlite数据库里面成功的生成了一个app01_UserInfo的表。这个表默认会有一个自增的id作为主键,另外两个字段是我们通过类创建的。
d. 如果希望使用mysql,因为Django默认使用了MySqldb模块,这个在3.0版本里面不存在,会直接报错。我们需要改为pymysql的模块,方法如下:
在project同名文件夹下的__init__文件中添加如下代码即可:
import pymysql
pymysql.install_as_MySQLdb()

2. 对于单表的增删改查询
查询
获取所有结果,获取到的结果是一个QuerySet的类似列表的对象,每一个元素本身又是一个对象,包括了id,name,password等属性。
obj = models.UserInfo.objects.all()
, , , , ]>
可以通过filter进行过滤,相当于sql的where语句,因为结果也是QuerySet,因此需要再使用first()获取第一个值
obj = models.UserInfo.objects.filter(id=nid).first()
增加
models.UserInfo.objects.create(username=u,password=p,user_group_id=3)
删除,可以在filter的基础上进行删除
models.UserInfo.objects.filter(id=nid).delete()
修改,有两种常见方式
第一个方式
models.UserInfo.objects.filter(id=nid).update(username=u,password=p)
第二个方式
obj=models.UserInfo.objects.filter(id=nid)obj.username=uobj.save()

首先题主用的Django版本是什么,django貌似没见过ForeignModel,根据orm,ForeignKey实际上就是sql里面的外键,个人理解楼主的题目是能不能一个字段对应多个其他表,如下:
class WhatAreYouTryToAsk:
filed_XXX = models.ForeignKey((ModelA,ModelB,))

这是不科学的啊亲,对于sql来说也不会一个字段能对应多个外键,想实现这种效果只能是有一张ModelA,ModelB的中间表,而filed的外键对应这张中间表
class MiddleTable(models.Model):
model_a = models.ForeignKey(ModelA)
model_b = models.ForeignKey(ModelB)

class WhatAreYouTryToAsk:
filed_XXX = models.ForeignKey(MiddleTable)

简单的说就是ModelA和ModelB有一个多对多的关系,上面的方法是显示的指明一个MiddleTable表,实时上可以使用Django里面的ManyToMany,ManyToMany的实际上会建一张中间表,因此你可以在ModelA或ModelB建立一个ManyToMany的字段,具体ManyToMany的用法请查阅文档。
class ModelA(models.Model):
model_bs = ManyToMany(ModelB)

class WhatAreYouTryToAsk:
filed_XXX = models.ForeignKey(ModelA)
# or this, 具体实现看需求
# filed_XXX = models.ForeignKey(ModelB)


介休市17011545365: django 单个models 可以定义多少个表 -
闵凤大生: 首先题主用的Django版本是什么,django貌似没见过ForeignModel,根据orm,ForeignKey实际上就是sql里面的外键,个人理解楼主的题目是能不能一个字段对应多个其他表,如下: class WhatAreYouTryToAsk:filed_XXX = models.ForeignKey...

介休市17011545365: django只使用一个模型文件models.py吗 -
闵凤大生: django的做法就是全放一个models.py,如果强行拆分,很麻烦.如果逻辑非常复杂,将app拆分.老话说得好:“宁拆十个app,不拆models.”

介休市17011545365: django model的get和filter方法的区别 -
闵凤大生: get得到的是一个model对象,filter得到的是一组model对象,类型是queryset,是一个django定义的,可迭代的,可以当作是一个list操作,每个索引都是一个model对象.get如果满足的条件大于一个的时候,会报错#有点类似于如下:get相当与fetchone()filter相当与fetchall()

介休市17011545365: django中的models有什么用 -
闵凤大生: model的作用是定义出对象模型,一般都是和数据库里表对应,一个表一个model类,表里面的字段对应model类的属性,这其实是MVC思想中的M的model层

介休市17011545365: django model object 可以只取一列么 -
闵凤大生: 可以的,假如有一个Model叫做books,其中有id,name,code等列,如果相取其中的name列,那么可以这样写:books.objects.values("name").这个方法返回的是ValuesQuerySet,是QuerySet 的子类,也就是说,你可以用QuerySet里的方法.需要注意的是,返回的不是list,不要直接当list来用了.对ValuesQuerySet遍历,每一个元素是“字典”dict.还有一个是:books.objects.values_list("name") 这个和values一样,只是返回的不是字典而是元组.

介休市17011545365: django使用已有的数据库表怎么建立model -
闵凤大生: 在网上看到都是使用Django的models和makemigration,migrate命令来创建新表,并使用.可是我的数据已经存在了已经创建好,并且已经存储有数据了,不能再重新创建新表了.了解Django的表明和models名称的映射关系就可以让Django使用...

介休市17011545365: django models.SlugField 怎么使用 -
闵凤大生: SlugField字段是将输入的内容中的空格都替换成'-'之后保存Django官方文档中关于SlugField的描述如下:class SlugField([max_length=50, **options]) Slug 是一个新闻术语,通常是某些东西的短标签.一个slug只能包含字母、数字、下划线或...

介休市17011545365: python Django 生成sql语句 -
闵凤大生: Django提供了sql,sql_all命令来生成MODEL的SQL语句,当定义好Django Model后,可以在初始化调用Syncdb方法来自动在数据库里面生成相应的表.Model定义如下:class TestModel(models.Model):Name=models.CharField(max_length=64,...

介休市17011545365: django中的models.manytomanyfield是什么意思 -
闵凤大生: Django 创建一个中间表来表示ManyToManyField关系.默认情况下,中间表的名称由两个关系表名结合而成.由于某些数据库对表名的长度有限制,所以中间表的名称会自动限制在64个字符以内,并包含一个不重复的哈希字符串.这意味着,你可能看到类似 book_authors_9cdf4 这样的表名称.你可以使用 db_table 选项手动指定中间表名称.

介休市17011545365: 如何在 Django models 中使用多语言 的简单方法 -
闵凤大生: django model中使用多语言支持的快速方法, 该方法通过建立自定义的template tag 选取model中重复的语言field来达到多语言显示的目的.假设我们有这样一个models.py, 某一个model中包含多个重复的field, 每个重复的field都是用来保存其对...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网