首页>>后端>>Python->djangomodels如何使用(2023年最新解答)

djangomodels如何使用(2023年最新解答)

时间:2023-12-15 本站 点击:0

导读:本篇文章首席CTO笔记来给大家介绍有关djangomodels如何使用的相关内容,希望对大家有所帮助,一起来看看吧。

django models.SlugField 怎么使用

SlugField字段是将输入的内容中的空格都替换成‘-’之后保存

Django官方文档中关于SlugField的描述如下:

class SlugField([max_length=50, **options])

Slug 是一个新闻术语,通常是某些东西的短标签。一个slug只能包含字母、数字、下划线或者是连字符,通常用来作为短标签。通常它们是用来放在URL里的。

像CharField一样,你可以指定max_length(也请参阅该部分中的有关数据库可移植性的说明和max_length)。如果没有指定 max_length, Django将会默认长度为50。

SlugField字段的Field.db_index自动设置为True。

通常根据另一个值自动生成slug来填充到SlugField的值。你可以在admin中使用prepopulated_fields自动执行此操作。

可以重写save(),用slugfy方法转化数据后自动填充到SlugField中。简单示范如下

class test(models.Model):

    q = models.CharField(max_length=30)

    s = models.SlugField()

    def save(self, *args, **kwargs):

        self.s = slugify(self.q)

        super(test, self).save(*args, **kwargs)

一般多应用于URL正则表达式中的named group,作为参数在视图和URL之间传递

如何在 Django models 中使用多语言 的简单方法

django model中使用多语言支持的快速方法, 该方法通过建立自定义的template tag 选取model中重复的语言field来达到多语言显示的目的.

假设我们有这样一个models.py, 某一个model中包含多个重复的field, 每个重复的field都是用来保存其对应的显示语言:

class MyObject(models.Model):

name = models.CharField(max_length=50)

title_en = models.CharField(max_length=50)

title_es = models.CharField(max_length=100)

title_fr = models.CharField(max_length=100)

description_en = models.CharField(max_length=100)

description_es = models.CharField(max_length=100)

description_fr = models.CharField(max_length=100)

class MyOtherObject(models.Model):

name = models.CharField(max_length=50)

content_en = models.CharField(max_length=200)

content_es = models.CharField(max_length=200)

content_fr = models.CharField(max_length=200)

注意, 我们将下划线和语言代码作为后缀放在对应的field后面, 这将作为一个语言的查找标记.

然后我们在settings.py中添加需要翻译的field名:

TRANSLATION_FIELDS = ('title', 'description', 'content')

在项目目录中添加templatetags目录(不要忘了怎家__init__.py), 并在其中建立lazy_tags.py:

from django import template

from settings import TRANSLATION_FIELDS

register = template.Library()

class LocalizedContent(template.Node):

def __init__(self, model, language_code):

self.model = model

self.lang = language_code

def render(self, context):

model = template.resolve_variable(self.model, context)

lang = template.resolve_variable(self.lang, context)

for f in TRANSLATION_FIELDS:

try:

setattr(model, f, getattr(model, '%s_%s' % (f, lang)))

except AttributeError:

pass

return ''

@register.tag(name='get_localized_content')

def get_localized_content(parser, token):

bits = list(token.split_contents())

if len(bits) != 3:

raise template.TemplateSyntaxError("'get_localized_content' tag takes exactly 2 arguments")

return LocalizedContent(model=bits[1], language_code=bits[2])

为了在template中使用自定义的tag, 我们首先载入:

{% load lazy_tags %}

然后使用自定义tag, 传入object和语言代码, 取的翻译. 比如西班牙语:

{% get_localized_content object 'es' %}

此时, 如果没有语言代码传入, 那么无法使用obj.description调用某一个语言field. 所以我们配合django.core.context_processors.request, context processor一起使用:

TEMPLATE_CONTEXT_PROCESSORS = (

...

'django.core.context_processors.request',

)

我们就能在template中这样使用:

{% get_localized_content object request.LANGUAGE_CODE %}

django使用已有的数据库表怎么建立model

在网上看到都是使用Django的models和makemigration,migrate命令来创建新表,并使用。可是我的数据已经存在了已经创建好,并且已经存储有数据了,不能再重新创建新表了。了解Django的表明和models名称的映射关系就可以让Django使用已经存在的表。

假如在Django存在models如下:

[python] view plain copy

from django.db import models

# Create your models here.

class Sciencenews(models.Model):

id = models.CharField(max_length=36,primary_key=True)

first_module = models.CharField(max_length=30,default="News")

second_module = models.CharField(max_length=30,default="Latest News")

title = models.CharField(max_length=300)

author = models.CharField(max_length=60,null=True)

publish_date = models.CharField(max_length=35,null=True)

content = models.TextField(null=True)

crawl_date = models.CharField(max_length=35,null=True)

from_url = models.CharField(max_length=350,null=True)

执行数据迁移命令:

[python] view plain copy

python manage.py makemigration

python manage.py migrate

会在数据库中生成名称为show_sciencenews的数据表。show为应用名称,此处我的应用名称为show。可以看到Django创建表的命名规则:应用名_模型名。

我的存储爬取到的数据的表格名称原来为science_news,想要Django使用它,而不是创建新的表,只需要把的它的名称改为:应用名_要与该表映射的models名称,在此处我改为show_sciencenews。然后使用如上的数据迁移命令,这时可能会提示数据表已经存在的错误,不用理会,models已经和数据表映射上了。接下来只需要正常使用models和数据表就可以了。

自己写的python程序怎么使用的django的models

python的话,你可以把python的安装环境加到系统变量(我记得是自动添加的,可以在dos下直接运行python)

至于django的话,可以直接运行django-admin

startproject

mysite2(django-admin不用.py),不用python

django-admin.py

startproject

mysite2(如果要的话,需要在python安装包下的script添加到系统环境变量)

Django models 多对一关系中 on_delete 参数的设置

Django 中使用 django.db.models.ForeignKey  定义多对一关系。

在定义中,有一个参数是必须要设置的,就是 on_delete。

顾名思义,就是设置在删除关联表中的数据时,当前表与其关联的field的行为。

改参数的取值有:

None:关联的数据同时删除;

models.CASCADE:与None类似,默认删除;

models.DO_NOTHING:什么都不做,不报错;

models.PROTECT:阻止删除,并触发ProtectError报错;

models.SET_NULL:设置当前表关联数据的值为null(必须支持null,即null参数为True);

models.SET_DEFAULT:设置当前关联数据的值为default(必须定义了default);

models.SET(a):设置当前关联数据的值为a(a为一个具体的值或者一个全局可调用的回调函数);

结语:以上就是首席CTO笔记为大家介绍的关于djangomodels如何使用的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Python/36051.html