小编Sen*_* H.的帖子

运行shell_plus虽然PyCharm?

有没有办法让我配置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)

python django pycharm

10
推荐指数
4
解决办法
2252
查看次数

如何从框架中清除Django登录消息

Django 1.6Django allauth有一个项目设置.当用户登录django时,会向用户会话及其堆栈中保存一条登录消息.当用户到达包含消息框架的任何页面时,登录消息显示其他消息.

由于这个原因,我想在用户登录后从消息队列中删除登录消息.

我尝试在djangoallauthuser_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)

python django

7
推荐指数
1
解决办法
1490
查看次数

如何使用 django prefetch_related 在 mptt 树上预取孩子的父母?

比如说,我有一个产品实例。产品实例链接到第 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)

但是当深度级别未知时,此查询无效。有没有办法在上面的查询中动态预取父母?

django prefetch mptt

7
推荐指数
1
解决办法
412
查看次数

Django给出无法在没有主键的情况下强制执行save()更新

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)

django

4
推荐指数
1
解决办法
3570
查看次数

有没有办法在 django 内联表单集清理方法中访问请求对象?

得到了这个带有内联和表单类的管理类:

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)

django django-forms

2
推荐指数
1
解决办法
1903
查看次数

缩短这种比例方法的最Pythonic方法是什么?

我正在寻找一种缩短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)

python

-3
推荐指数
1
解决办法
101
查看次数

标签 统计

django ×5

python ×3

django-forms ×1

mptt ×1

prefetch ×1

pycharm ×1