导读:今天首席CTO笔记来给各位分享关于django的model模块怎么写的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
自己写的python程序怎么使用的django的models
在一个爬虫脚本中将爬取的数据通过django自带的model保存到数据库
修改的文件(其余pycharm新建Django项目生成,未修改):
# testapp/models.pyfrom django.db import models class Problem(models.Model): title = models.CharField(max_length=100, default="") author = models.CharField(max_length=100, default="")
def __str__(self): return self.title pass
# testapp/spider.pyimport osimport sysimport django pathname = 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() from testapp.models import Problem if __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 在后台管理界面注册 Problemfrom django.contrib import admin # Register your models here. from testapp.models import Problemadmin.site.register(Problem)
Django model 遇到查询条件组合比较多的情况下怎么写
没有用过djongo,但是我想应该都是差不多的,这类orm的filter或者where方法返回的都是一个query对象,所以应该是可以连续使用filter的。
比如你前面写了a = search.objects.filter( xxx ), 然后你想再加一个条件,就继续a.filter( yy )就好。
django modelchoicefield页面怎么写
1. 这是行不通的。看一看这ModelChoiceField工作原理:
try:
key = self.to_field_name or 'pk'
value = self.queryset.get(**{key: value})
except self.queryset.model.DoesNotExist:
raise ValidationError(self.error_messages['invalid_choice'])
return value
你不能随意添加到它。 使用ChoiceField代替和定制处理数据。
class TestForm(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) + [('new stuff', 'new')]
def clean_mychoicefield(self):
data = self.cleaned_data.get('mychoicefield')
if data in QS_CHOICES:
try:
data = MyModel.objects.get(id=data)
except MyModel.DoesNotExist:
raise forms.ValidationError('foo')
return data
2. 看来,你只是想使这些表单字段是可选的。不要让坚硬的自己。请参阅有关的规定标志着一个表单域。
lead = forms.ModelChoiceField(queryset=People.objects.filter(poc__in=('lead', 'sr.lead')), required=False)
3. 你有PK Person对象'无'? 我想你应该
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')
or for updating
self.fields['lead'].queryset = qs
Django Model层的设计一般是怎么进行的
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] 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和数据表就可以了。
django 中template 怎么使用model自定义的方法
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 %}
结语:以上就是首席CTO笔记为大家整理的关于django的model模块怎么写的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~