发布网友 发布时间:2024-10-04 09:01
共1个回答
热心网友 时间:2024-10-05 10:56
导读:今天首席CTO笔记来给各位分享关于django的model模块怎么写的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
自己写的python程序怎么使用的django的models在一个爬虫脚本中将爬取的数据通过django自带的model保存到数据库
修改的文件(其余pycharm新建Django项目生成,未修改):
#testapp/models.pyfromdjango.dbimportmodelsclassProblem(models.Model):title=models.CharField(max_length=100,default="")author=models.CharField(max_length=100,default="")
def__str__(self):returnself.titlepass
#testapp/spider.pyimportosimportsysimportdjangopathname=os.path.dirname(os.path.abspath(__file__))sys.path.insert(0,pathname)sys.path.insert(0,os.path.abspath(os.path.join(pathname,'..')))os.environ.setdefault("DJANGO_SETTINGS_MODULE","testproject.settings")django.setup()fromtestapp.modelsimportProblemif__name__=="__main__":p=Problem(title="hi",author="hi")p.save()pass
#testproject/setting.py......INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',#添加应用'testapp',]......
#testapp/admin.py在后台管理界面注册Problemfromdjango.contribimportadmin#Registeryourmodelshere.fromtestapp.modelsimportProblemadmin.site.register(Problem)
Djangomodel遇到查询条件组合比较多的情况下怎么写没有用过djongo,但是我想应该都是差不多的,这类orm的filter或者where方法返回的都是一个query对象,所以应该是可以连续使用filter的。
比如你前面写了a=search.objects.filter(xxx),然后你想再加一个条件,就继续a.filter(yy)就好。
djangomodelchoicefield页面怎么写
1.这是行不通的。看一看这ModelChoiceField工作原理:
try:
key=self.to_field_nameor'pk'
value=self.queryset.get(**{key:value})
exceptself.queryset.model.DoesNotExist:
raiseValidationError(self.error_messages['invalid_choice'])
returnvalue
你不能随意添加到它。使用ChoiceField代替和定制处理数据。
classTestForm(forms.Form):
mychoicefield=forms.ChoiceField(choices=QS_CHOICES)
def__init__(self,*args,**kwargs):
super(TestForm,self).__init__(*args,**kwargs)
self.fields['mychoicefield'].choices=\
list(self.fields['mychoicefield'].choices)+[('newstuff','new')]
defclean_mychoicefield(self):
data=self.cleaned_data.get('mychoicefield')
ifdatainQS_CHOICES:
try:
data=MyModel.objects.get(id=data)
exceptMyModel.DoesNotExist:
raiseforms.ValidationError('foo')
returndata
2.看来,你只是想使这些表单字段是可选的。不要让坚硬的自己。请参阅有关的规定标志着一个表单域。
lead=forms.ModelChoiceField(queryset=People.objects.filter(poc__in=('lead','sr.lead')),required=False)
3.你有PKPerson对象'无'?我想你应该
self.fields['lead']=forms.ModelChoiceField(queryset=Pepole.objects.filter(poc__in=('lead','sr.lead')),empty_label="None")
self.fields['lead2']=forms.ModelChoiceField(queryset=Pepole.objects.filter(role__in=('lead','sr.lead')),empty_label="None")
编辑:既然你一个modelchoicefield,我认为所有的选择将是要么机型或者不选。通过修改传递给构造函数的modlechoicefield,如QuerySet的你可以“扩展”该类型的选择:
qs=People.objects.filter(poc__in=('lead','sr.lead'))
ext=People.objects.filter(role__in=('lead','sr.lead'))
qs=qs|ext
self.fields['lead']=forms.ModelChoiceField(queryset=qs,empty_label='None')
orforupdating
self.fields['lead'].queryset=qs
DjangoModel层的设计一般是怎么进行的model是数据库的设置,看你需要存储那些数据,就设置那些表,然后加入相应的字段
#?Create?your?models?here.
class?user(models.Model):
????username?=?models.CharField(max_length=20,?default='')?#name属性,字段
????password?=?models.CharField(max_length=50,?default='')?#password属性,字段
????#此方法在print对象的时候,可以打印字符串,类似java中的toString()方法
????def?__str__(self):
????????return?self.username?+?self.password
django使用已有的数据库表怎么建立model在网上看到都是使用Django的models和makemigration,migrate命令来创建新表,并使用。可是我的数据已经存在了已经创建好,并且已经存储有数据了,不能再重新创建新表了。了解Django的表明和models名称的映射关系就可以让Django使用已经存在的表。
假如在Django存在models如下:
[python]?viewplain?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]?viewplain?copy
python?manage.py?makemigration
python?manage.py?migrate
会在数据库中生成名称为show_sciencenews的数据表。show为应用名称,此处我的应用名称为show。可以看到Django创建表的命名规则:应用名_模型名。
我的存储爬取到的数据的表格名称原来为science_news,想要Django使用它,而不是创建新的表,只需要把的它的名称改为:应用名_要与该表映射的models名称,在此处我改为show_sciencenews。然后使用如上的数据迁移命令,这时可能会提示数据表已经存在的错误,不用理会,models已经和数据表映射上了。接下来只需要正常使用models和数据表就可以了。
django中template怎么使用model自定义的方法djangomodel中使用多语言支持的快速方法,该方法通过建立自定义的templatetag选取model中重复的语言field来达到多语言显示的目的.
假设我们有这样一个models.py,某一个model中包含多个重复的field,每个重复的field都是用来保存其对应的显示语言:
classMyObject(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)
classMyOtherObject(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:
fromdjangoimporttemplate
fromsettingsimportTRANSLATION_FIELDS
register=template.Library()
classLocalizedContent(template.Node):
def__init__(self,model,language_code):
self.model=model
self.lang=language_code
defrender(self,context):
model=template.resolve_variable(self.model,context)
lang=template.resolve_variable(self.lang,context)
forfinTRANSLATION_FIELDS:
try:
setattr(model,f,getattr(model,'%s_%s'%(f,lang)))
exceptAttributeError:
pass
return''
@register.tag(name='get_localized_content')
defget_localized_content(parser,token):
bits=list(token.split_contents())
iflen(bits)!=3:
raisetemplate.TemplateSyntaxError("'get_localized_content'tagtakesexactly2arguments")
returnLocalizedContent(model=bits[1],language_code=bits[2])
为了在template中使用自定义的tag,我们首先载入:
{%loadlazy_tags%}
然后使用自定义tag,传入object和语言代码,取的翻译.比如西班牙语:
{%get_localized_contentobject'es'%}
此时,如果没有语言代码传入,那么无法使用obj.description调用某一个语言field.所以我们配合django.core.context_processors.request,contextprocessor一起使用:
TEMPLATE_CONTEXT_PROCESSORS=(
...
'django.core.context_processors.request',
)
我们就能在template中这样使用:
{%get_localized_contentobjectrequest.LANGUAGE_CODE%}
结语:以上就是首席CTO笔记为大家整理的关于django的model模块怎么写的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~