有没有办法让我配置PyCharm来运行shell_plus而不是默认的shell?
我已经尝试将manage命令的文本放在'Starting script'中,但后来我得到了django_manage_shell.run("/ Users/cmason/counsyl/code/website/counsyl/product")import os import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
# The new Django 1.4 default manage.py wants "from django..." before
# importing settings, but we usually tinker with sys.path in
# settings_local.py, which is called from settings.py. Importing
# settings.py works but does mean some double importing. Luckily that
# module does very little work.
import settings
# appease pyflakes; don't ever do this in
# non-super-meta-namespace-trickery code
settings
from django.core.management import execute_from_command_line
execute_from_command_line("shellplus") …Run Code Online (Sandbox Code Playgroud) Django 1.6和Django allauth有一个项目设置.当用户登录django时,会向用户会话及其堆栈中保存一条登录消息.当用户到达包含消息框架的任何页面时,登录消息显示其他消息.
由于这个原因,我想在用户登录后从消息队列中删除登录消息.
我尝试在django和allauth的user_logged_in 信号中删除登录消息,但我发现消息不是在那里创建的.
消息删除代码的示例如下:
# from allauth.account.signals import user_logged_in
# First I tried allauth signal above.
from django.contrib.auth.signals import user_logged_in
@receiver(user_logged_in)
def user_logged_in_(request, **kwargs):
storage = messages.get_messages(request)
storage.used = True
Run Code Online (Sandbox Code Playgroud)
编辑:下面的解决方法正在运行.但我觉得这不是正确的方法.
在此之后,我决定做一个解决方法.用户登录后,用户重定向到索引视图.我storage.used = True在索引视图中删除了信号和追加方法.它也没有用.
def clear_messages(request):
storage = messages.get_messages(request)
storage.used = True
def index(request):
clear_messages(request)
return render_to_response('website/index.html', {}, context_instance=RequestContext(request, {}))
Run Code Online (Sandbox Code Playgroud)
比如说,我有一个产品实例。产品实例链接到第 4 级子类别。如果我只想获取根类别和第 4 级子类别,下面的查询足以以最少的数据库查询获取数据:
Product.objects.filter(active=True).prefetch_related('category__root',
'category')
Run Code Online (Sandbox Code Playgroud)
如果我必须联系该产品类别的父级并get_ancestors()为此使用方法,则会发生近三倍的模式数据库查询。
如果我使用get_ancestors()方法编写如下查询,则数据库查询保持低位。
Product.objects.filter(active=True).prefetch_related(
'category__root',
'category',
'category__parent',
'category__parent__parent',
'category__parent__parent__parent',
'category__parent__parent__parent__parent')
Run Code Online (Sandbox Code Playgroud)
但是当深度级别未知时,此查询无效。有没有办法在上面的查询中动态预取父母?
我ValueError: Cannot force an update in save() with no primary key.在代码遇到异常并运行get_or_create代码时得到了.Model在数据库中有自动增量id字段的表.而且这不是更新过程.我无法理解为什么Django表现得像这样.
错误:
Traceback (most recent call last):
File "x.py", line 1980, in <module>
getattr(a, islem)()
File "x.py", line 718, in method
Slug='undefined', Status=False)
File "~/env/local/lib/python2.7/site-packages/django/db/models/manager.py", line 135, in get_or_create
return self.get_query_set().get_or_create(**kwargs)
File "~/env/local/lib/python2.7/site-packages/django/db/models/query.py", line 385, in get_or_create
obj.save(force_insert=True, using=self.db)
File ~/core/modules/xx/models.py", line 78, in save
super(Categories, self).save(args, kwargs)
File "~/env/local/lib/python2.7/site-packages/django/db/models/base.py", line 460, in save
self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "x/env/local/lib/python2.7/site-packages/django/db/models/base.py", line 541, in save_base
raise …Run Code Online (Sandbox Code Playgroud) 得到了这个带有内联和表单类的管理类:
class InvoiceAdmin(admin.ModelAdmin):
....
inlines = [InvoiceLineInline, ]
form = InvoiceForm
....
class InvoiceForm(forms.ModelForm):
....
def clean():
....
class Meta:
model = Invoice
exclude = []
class InvoiceLineInline(admin.TabularInline):
model = InvoiceLine
formset = InvoiceLineInlineFormset
extra = 1
class InvoiceLineInlineFormset(forms.models.BaseInlineFormSet):
def clean(self):
super(InvoiceLineInlineFormset, self).clean()
count = 0
for form in self.forms:
if not hasattr(form, 'cleaned_data'):
continue
data = form.cleaned_data
try:
if data:
count += 1
else:
continue
except AttributeError:
pass
if Decimal(data.get('quantity', 0)) <= 0:
raise forms.ValidationError("Amount should be greater than …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种缩短find_equivalent()比例方法的方法,以大多数Pythonic方式.
如果ynumber不在范围内,则0 - 2000应该返回0.否则,方法应该找到范围,y并将相等的数字返回到范围.
def find_equivalent(y):
if y <= 0 or y > 2000:
return 0
elif 0 < y <= 100:
if y in range(1, 34):
return 18
if y in range(34, 67):
return 17
if y in range(67, 101):
return 16
elif 100 < y <= 200:
if y in range(101, 134):
return 15
if y in range(134, 167):
return 14
if y in range(167, 201):
return 13 …Run Code Online (Sandbox Code Playgroud)