据我所知,TextField当你使用PostgreSQL数据库时,你应该总是使用一个变长字符串,因为a TextField和a 之间的速度差异CharField可以忽略不计PostgreSQL.我是Django的新手,并且正在考虑TextField在我的数据库中使用一个可变长度的URL.我想知道使用它是否有任何好处URLField?使用TextField而不是URLField网址会被视为不良形式吗?
我怎样才能重新使用原来的管理员登录()和AuthenticationForm设置较长的Cookie有效期与"记住我"选项,在登录页面检查用户?我目前正在通过urls.py使用内置登录
url(r'^login/$','django.contrib.auth.views.login', {'template_name': 'authentication/login.html'}, name='login'),
Run Code Online (Sandbox Code Playgroud)
该复选框在我的login.html中实现为:
<label><input name="remember_me" type="checkbox">Keep me logged in</label>
Run Code Online (Sandbox Code Playgroud)
但我不知道如何通过AuthenticationForm传递信息给django.contrib.auth.views.login
目前,如果用户未选中"记住我"框,则会在settings.py中定义cookie年龄
SESSION_COOKIE_AGE = 360
Run Code Online (Sandbox Code Playgroud)
我发现了几个类似的问题,但我认为这不需要安装单独的应用程序.下面的代码片段(http://djangosnippets.org/snippets/1881/)看起来很有希望,但我只编写了几个月的python和Django,但是我无法让它工作:
def login(request, *args, **kwargs):
if request.method == 'POST':
if not request.POST.get('remember_me', None):
request.session.set_expiry(0)
return auth_views.login(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的django 1.4项目,并尝试发出syncdb来创建(postgres)数据库模式.我收到这个错误: -
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 196, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 371, in handle
return self.handle_noargs(**options)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs
cursor = connection.cursor()
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/dummy/base.py", line 15, in complain
raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly …Run Code Online (Sandbox Code Playgroud) 这就是我的模型的样子:
class QuestionTagM2M(models.Model):
tag = models.ForeignKey('Tag')
question = models.ForeignKey('Question')
date_added = models.DateTimeField(auto_now_add=True)
class Tag(models.Model):
description = models.CharField(max_length=100, unique=True)
class Question(models.Model):
tags = models.ManyToManyField(Tag, through=QuestionTagM2M, related_name='questions')
Run Code Online (Sandbox Code Playgroud)
我真正想做的就是在创建给定的多人关系时添加时间戳.这很有意义,但它也增加了一些复杂性.除了删除.add()功能之外[尽管事实上我真正添加的唯一字段是自动创建的,所以它在技术上不应该再干扰它了].但我可以忍受这一点,因为我不介意做额外的事情,QuestionTagM2M.objects.create(question=,tag=)如果这意味着获得额外的时间戳功能.我的问题是我真的很想能够filter_horizontal在管理员中保存我的javascript小部件.我知道文档说我可以用内联代替,但因为没有其他字段实际上是内联除了外键,这是太笨重Tag反正.此外,在我的数据库模式的更大方案中,我的Question对象已经在我的管理页面上显示为内联,并且由于Django不支持admin [yet]中的嵌套内联,我无法为给定的选择标记题.有没有办法覆盖formfield_for_manytomany(self, db_field, request=None, **kwargs)或类似的东西允许我使用漂亮的filter_horizontal小部件和自动创建date_added列到数据库?这似乎是django应该能够本地执行的东西,只要您指定中间的所有列都是自动创建的(除外键之外)可能与auto_created=True?或类似的东西
对于在非平凡的生产环境中拥有django应用程序的人,您如何处理数据库迁移?我知道有south,但如果涉及任何实质性的事情,似乎会错过很多.
另外两个选项(我能想到或已经使用过)是在测试数据库上进行更改,然后(使用应用程序脱机)并导入该sql导出.或者,也许是一个风险更高的选择,实时对生产数据库进行必要的更改,如果出现任何问题,还原为备份.
您通常如何处理数据库迁移和架构更改?
如何将空格分隔的整数输入转换为整数列表?
输入示例:
list1 = list(input("Enter the unfriendly numbers: "))
Run Code Online (Sandbox Code Playgroud)
转换示例:
['1', '2', '3', '4', '5'] to [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud) 我需要的其中一种形式是简单字段(比如"Department","Building"和"RoomNumber")的组合,以及动态生成的字段对(比如"Name"和"Email").理想情况下,编辑简单字段的内容以及添加/删除动态字段对将在单个表单上完成.
代码方面,我想知道是否尝试将Formset(具有两个动态字段的表单)作为普通形式的字段嵌入是一种明智的方法,或者是否有另一种最佳实践来实现我想要实现的目标.
非常感谢有关这些问题的任何建议,
我有一个看起来像这样的模型:
class Invite(models.Model):
user = models.ForeignKey(User)
event = models.ForeignKey(Event)
roles = models.ManyToManyField(Role, blank=True, null=True)
sent = models.BooleanField("Invite Sent", default=False, editable=False)
created = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return u"%s" % self.user
class Meta:
unique_together =(('user','event'),)
class Role(models.Model):
"""
This associates a user's role to an event
"""
event = models.ForeignKey(Event, related_name="roles")
roletype = models.ForeignKey(RoleType)
profiles = models.ManyToManyField(Profile, related_name="roles",
blank=True, null=True)
modified = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
因此,无论何时创建新事件,都会创建一堆角色.在Invite模型中,我如何只显示与我在Django Admin中的更改表单中选择的事件相关联的角色,而不是显示Role模型中的所有条目?
我使用的烦恼search_fields,当搜索表达式中有多个单词,我想执行startswith搜索
我上课了
class Foo(models.Model):
kw = models.CharField(max_length = 255)
...
class FooAdmin(admin.ModelAdmin):
search_fields = ('^kw',)
Run Code Online (Sandbox Code Playgroud)
在'^'表明我要执行startswith搜索.如果我正在寻找kw'foo fuu',django将执行查询:
select * from app_foo where `foo`.`kw` like 'foo%' and `foo`.`kw` like 'fuu%'
Run Code Online (Sandbox Code Playgroud)
此查询显然没有结果.我该怎么做才能让引擎找到'foo fuu%'?
我已经使用UpdateCacheMiddleware和FetchFromCacheMiddlewareMiddleWare来实现站点范围的匿名缓存,以获得不同程度的成功.
最大的问题是中间件只缓存匿名用户的第一个请求.由于在第一个响应上设置了session_id cookie,因此匿名用户的后续请求不会因为Headers上的视图级缓存变化而到达缓存.
我的网页在匿名用户中没有显着差异,并且只要它们有所不同,我可以通过Ajax处理.结果,我决定尝试将Django的缓存中间件子类化为不再改变Header.相反,它在Anonymous vs. LoggedIn Users上有所不同.因为我正在使用Auth后端,并且该处理程序在从缓存中获取之前发生,所以它似乎有效.
class AnonymousUpdateCacheMiddleware(UpdateCacheMiddleware):
def process_response(self, request, response):
"""
Sets the cache, if needed.
We are overriding it in order to change the behavior of learn_cache_key().
"""
if not self._should_update_cache(request, response):
# We don't need to update the cache, just return.
return response
if not response.status_code == 200:
return response
timeout = get_max_age(response)
if timeout == None:
timeout = self.cache_timeout
elif timeout == 0:
# max-age was set to 0, don't …Run Code Online (Sandbox Code Playgroud) django ×9
django-admin ×4
python ×3
caching ×1
checkbox ×1
django-forms ×1
django-south ×1
django-views ×1
dynamic ×1
input ×1
integer ×1
list ×1
login ×1
middleware ×1
migration ×1
mysql ×1
performance ×1
postgresql ×1
remember-me ×1
url ×1