对于django-admin.pydumpdata到SQL语句感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解django导入mysql,并且为您提供关于day82DjangoAdmin组件
对于django-admin.py dumpdata到SQL语句感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解django导入mysql,并且为您提供关于day 82 Django Admin 组件.、Django Admin Cookbook-15 如何在 Django Admin 后台模型列表页面中添加自定义操作按钮、Django Admin Cookbook-16如何使用Django Admin管理后台导入CSV、Django Admin Cookbook-38如何获取特定对象的Django Admin后台URL的宝贵知识。
本文目录一览:- django-admin.py dumpdata到SQL语句(django导入mysql)
- day 82 Django Admin 组件.
- Django Admin Cookbook-15 如何在 Django Admin 后台模型列表页面中添加自定义操作按钮
- Django Admin Cookbook-16如何使用Django Admin管理后台导入CSV
- Django Admin Cookbook-38如何获取特定对象的Django Admin后台URL
django-admin.py dumpdata到SQL语句(django导入mysql)
我正在尝试将数据转储到SQL语句。django-admin.py dumpdata仅提供json,xml,yaml。所以:
有人知道这样做的好方法吗?
我尝试过:
def sqldumper(模型):
result = ""units = model.objects.all().values()for unit in units: statement = "INSERT INTO myapp.model "+str(tuple(unit.keys())).replace("''", "")+" VALUES " + str(tuple(unit.values()))+"\r\n" result+=statementreturn result
因此,我自己查看模型的值,然后自己编写INSERT语句。然后我想到了使用“ django-admin.py sql”来获取“
CREATE”语句..但是后来我不知道如何从我的代码内部使用此行(而不是通过命令行)。我尝试了os.popen和os.system,但是它实际上不起作用..关于此的任何提示?
我将明确指出:如何在代码内部使用“ manage.py sql”?
我在我的视图中添加以下内容:
import os, sysimport impfrom django.core.management import execute_managersys_argv_backup = sys.argvimp.find_module("settings")import settingssys.argv = ['''',''sql'',''myapp'']execute_manager(settings)sys.argv = sys_argv_backup
事实是-
它可以工作..但是它会将语句写到标准输出中…这是某种东西,但并不完美。我将尝试直接使用django.core.management.sql.sql_create,我们将看看它如何进行。
谢谢
答案1
小编典典我建议使用特定于SQL的转储程序(例如,用于MySQL的mysqldump)。
对于嵌入在Python中的sqlite,您可以查看以下示例,该示例不涉及Django:
# Convert file existing_db.db to SQL dump file dump.sqlimport sqlite3, oscon = sqlite3.connect(''existing_db.db'')with open(''dump.sql'', ''w'') as f: for line in con.iterdump(): f.write(''%s\n'' % line)
day 82 Django Admin 组件.
一、先建表环境
modules 文件
from django.db import models
# Create your models here.
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
''''''
用户表
''''''
nid =models.AutoField(primary_key=True)
phone =models.CharField(max_length=11,null=True,unique=True)
avatar = models.FileField(upload_to=''avatars/'',default=''avatars/default.png'',verbose_name=''头像'')
create_time =models.DateTimeField(auto_now_add=True)
blog =models.OneToOneField(to=''Blog'',to_field=''nid'',null=True)
def __str__(self):
return self.username
class Blog(models.Model):
''''''
博客信息
''''''
nid =models.AutoField(primary_key=True)
title =models.CharField(max_length=64)
site =models.CharField(max_length=32,unique=True)
theme =models.CharField(max_length=32)
def __str__(self):
return self.title
#
class Category(models.Model):
''''''
个人博客文章分类
''''''
nid =models.AutoField(primary_key=True)
title =models.CharField(max_length=32)#分类标题
blog = models.ForeignKey(to =''Blog'',to_field=''nid'')#外键关联博客,一个博客站点可以有多个分类
def __str__(self):
return self.title
class Tag(models.Model):
''''''''
标签
''''''
nid =models.AutoField(primary_key=True)
title =models.CharField(max_length=32)
blog =models.ForeignKey(to=''Blog'',to_field=''nid'') #所属博客
def __str__(self):
return self.title
class Article(models.Model):
''''''
文章
''''''
nid =models.AutoField(primary_key=True)
title = models.CharField(max_length=50) #文章标题描述
desc =models.CharField(max_length=255) #文章描述
create_time =models.DateTimeField()#创建时间
category = models.ForeignKey(to =''Category'',to_field=''nid'',null=True)
user = models.ForeignKey(to=''UserInfo'',to_field=''nid'')
tags =models.ManyToManyField( # 中介模型
to =''Tag'',
through=''Article2Tag'',
through_fields=(''article'',''tag'')#注意顺序
)
def __str__(self):
return self.title
class ArticleDetail(models.Model):
''''''
文章详情
''''''
nid =models.AutoField(primary_key=True)
content = models.TextField()
article =models.OneToOneField(to =''Article'',to_field=''nid'')
class Article2Tag(models.Model):
''''''
文章和标签的多对多关系表
''''''
nid =models.AutoField(primary_key=True)
article =models.ForeignKey(to=''Article'',to_field=''nid'')
tag =models.ForeignKey(to =''Tag'',to_field=''nid'')
class Meta:
unique_together = ((''article'',''tag''),)
class ArticleUpDown(models.Model):
''''''
点赞
''''''
nid= models.AutoField(primary_key=True)
user =models.ForeignKey(to =''UserInfo'',null=True)
article = models.BooleanField(default=True)
class Meta:
unique_together = ((''article'',''user''),)
class Comment(models.Model):
''''''
评论表
''''''
nid = models.AutoField(primary_key=True)
article =models.ForeignKey(to =''Article'',to_field=''nid'')
user =models.ForeignKey(to =''UserInfo'',to_field=''nid'')
content =models.CharField(max_length=255)#评论内容
create_time =models.DateTimeField(auto_now_add=True)
parent_comment =models.ForeignKey(''self'',null=True)
def __str__(self):
return self.content
# 告诉Django项目用哪张表做认证
AUTH_USER_MODEL =''app01.UserInfo''
新建一个管理员账号
admin / dadmin01
通过 web 去登录
修改显示的内容
展示的内容
设置某个字段为连接字段
增加方法字段:
批量初始化
重写页面
Admin 的实现流程
1. 启动
import admin
def autodiscover():
autodiscover_modules(''admin'', register_to=site)
执行每个 app 下的 admin.py 文件
2. 注册 (单例模式 singlelton pattern)
3.
单例模式
# class Person(object):
#
# def __init__(self,name,age):
# self.name=name
# self.age=age
#
#
# alex=Person("alex",33)
# egon=Person("egon",32)
# 单例模式方式 1 :__new__
# class Singleton(object):
#
# _instance = None
# def __new__(cls, *args, **kw):
# if not cls._instance:
# cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)
# return cls._instance
#
# class MyClass(Singleton):
# a = 1
#
#
#
# mc1=MyClass()
#
# mc2=MyClass()
#
# mc3=MyClass()
# print(id(mc1))
# print(id(mc2))
# print(id(mc3))
# 单例模式方式 2 :模块方式
# 思考1
# from mysingleton import my_singleton as my_singleton_new
#
# print(id(my_singleton_new))
# print(id(my_singleton))
# 思考2
# import func
#
# func.bar()
# 思考3
from mysingleton import my_singleton,My_Singleton
ms1=My_Singleton()
from mysingleton import my_singleton,My_Singleton
ms2=My_Singleton()
print(id(ms1))
print(id(ms2))
Django Admin Cookbook-15 如何在 Django Admin 后台模型列表页面中添加自定义操作按钮
15. 如何在 Django Admin 后台模型列表页面中添加自定义操作按钮?
UMSRA 之前决定,如果有足够的 k 石,所有 Hero 英雄都可以死亡。但是,他们希望能够改变主意,让所有 Hero 英雄都可以永生。
你需要添加两个按钮:一个按钮使所有英雄都可以死亡,而另一个按钮使所有英雄永生。由于它会影响所有英雄,而与选择无关,因此这需要一个单独的按钮,而不是操作下拉菜单。
首先,我们要更改 HeroAdmin 管理模型使用的模板文件,以便我们可以添加两个按钮:
@admin.register(Hero)
class HeroAdmin(admin.ModelAdmin, ExportCsvMixin):
change_list_template = "entities/heroes_changelist.html"
然后,我们需要覆盖 get_urls 方法,并在管理模型上添加 set_immortal 和 set_mortal 方法。它们将用作两种 view 视图:
def get_urls(self):
urls = super().get_urls()
my_urls = [
path(''immortal/'', self.set_immortal),
path(''mortal/'', self.set_mortal),
]
return my_urls + urls
def set_immortal(self, request):
self.model.objects.all().update(is_immortal=True)
self.message_user(request, "All heroes are now immortal")
return HttpResponseRedirect("../")
def set_mortal(self, request):
self.model.objects.all().update(is_immortal=False)
self.message_user(request, "All heroes are now mortal")
return HttpResponseRedirect("../")
最后,我们通过扩展 admin/change_list.html 来创建模板文件 entities/heroes_changelist.html:
{% extends ''admin/change_list.html'' %}
{% block object-tools %}
<div>
<form action="immortal/" method="POST">
{% csrf_token %}
<button type="submit">Make Immortal</button>
</form>
<form action="mortal/" method="POST">
{% csrf_token %}
<button type="submit">Make Mortal</button>
</form>
</div>
<br />
{{ block.super }}
{% endblock %}
在点击页面的 make_mortal 动作后,英雄全都可以死亡,你会看到如下消息提示。
返回目录
Django Admin Cookbook-16如何使用Django Admin管理后台导入CSV
16.如何使用Django Admin管理后台导入CSV?
假设你需要允许在Hero管理页面上导入CSV数据。为此,您需要添加一个指向更改Hero列表页面的链接,点击这个链接会跳转到上传页面。你需要编写一个处理POST请求的方法,来从CSV文件中获取数据对象:
class CsvImportForm(forms.Form):
csv_file = forms.FileField()
@admin.register(Hero)
class HeroAdmin(admin.ModelAdmin, ExportCsvMixin):
...
change_list_template = "entities/heroes_changelist.html"
def get_urls(self):
urls = super().get_urls()
my_urls = [
...
path(''import-csv/'', self.import_csv),
]
return my_urls + urls
def import_csv(self, request):
if request.method == "POST":
csv_file = request.FILES["csv_file"]
reader = csv.reader(csv_file)
# Create Hero objects from passed in data
# ...
self.message_user(request, "Your csv file has been imported")
return redirect("..")
form = CsvImportForm()
payload = {"form": form}
return render(
request, "admin/csv_form.html", payload
)
然后创建模板文件entities/heroes_changelist.html,以覆盖原有的admin/change_list.html:
{% extends ''admin/change_list.html'' %}
{% block object-tools %}
<a href="import-csv/">Import CSV</a>
<br />
{{ block.super }}
{% endblock %}
最后,创建上传页面csv_form.html:
{% extends ''admin/base.html'' %}
{% block content %}
<div>
<form action="." method="POST" enctype="multipart/form-data">
{{ form.as_p }}
{% csrf_token %}
<button type="submit">Upload CSV</button>
</form>
</div>
<br />
{% endblock %}
修改完后,会在更改Hero后台列表页面上会有一个Import CSV的链接.
点击后上传页面显示如下。
返回目录
Django Admin Cookbook-38如何获取特定对象的Django Admin后台URL
38.如何获取特定对象的Django Admin后台URL?
Hero模型有一个children字段,显示每个英雄的孩子的名字。你被要求将每个childrin链接到Hero模型更改页面。实现如下:
@admin.register(Hero)
class HeroAdmin(admin.ModelAdmin, ExportCsvMixin):
...
def children_display(self, obj):
display_text = ", ".join([
"<a href={}>{}</a>".format(
reverse(''admin:{}_{}_change''.format(obj._meta.app_label, obj._meta.model_name),
args=(child.pk,)),
child.name)
for child in obj.children.all()
])
if display_text:
return mark_safe(display_text)
return "-"
以上的reverse(''admin:{}_{}_change''.format(obj._meta.app_label, obj._meta.model_name), args=(child.pk,))
返回一个对象后台修改页的URL。
其他页面如下:
- 删除页URL:
reverse(''admin:{}_{}_delete''.format(obj._meta.app_label, obj._meta.model_name), args=(child.pk,))
- 历史页URL:
reverse(''admin:{}_{}_history''.format(obj._meta.app_label, obj._meta.model_name), args=(child.pk,))
返回目录
关于django-admin.py dumpdata到SQL语句和django导入mysql的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于day 82 Django Admin 组件.、Django Admin Cookbook-15 如何在 Django Admin 后台模型列表页面中添加自定义操作按钮、Django Admin Cookbook-16如何使用Django Admin管理后台导入CSV、Django Admin Cookbook-38如何获取特定对象的Django Admin后台URL等相关知识的信息别忘了在本站进行查找喔。
本文标签: