小编Ser*_*jik的帖子

Django:通过模型自动生成StackedInline的Friendlier标头?

我正在使用Django管理员StackedInline,如下所示:

class BookInline(admin.StackedInline):
    model = Book.subject.through
    verbose_name = 'Book'
    verbose_name_plural = 'Books with this subject'

class SubjectAdmin(admin.ModelAdmin):
    inlines = [
        BookInline,
    ]
Run Code Online (Sandbox Code Playgroud)

一切正常,但标题非常难看:

Books With This Subject
Book: Book_subject object
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何摆脱或改变这Book_subject object部分?

谢谢!

python django django-admin

8
推荐指数
1
解决办法
1577
查看次数

如何在CreateView的form_valid方法中引发错误

在Django项目中,我有一个视图(云),类型:CreateView.此视图具有inlineformset_factory.有用.但是,如果我提交带有错误的表单(请查看下面的"messages.error"),页面将重定向到project.get_absolute_url().问题是:表单内容回空.我知道那是因为HttpResponseRedirect.

如何在不破坏表格的情况下更改此内容?

views.py

class cloud(CreateView):
    template_name = 'base/cloud.html'
    form_class = UserForm

    def get_context_data(self, **kwargs):
        context = super(cloud, self).get_context_data(**kwargs)
        project = get_object_or_404(Project, slug=self.kwargs['slug'])
        context['project'] = project
        if self.request.POST:
            context['formset'] = IdeaFormset(self.request.POST or None)
        else:
            context['formset'] = IdeaFormset()
        return context

    def form_valid(self, form, **kwargs):
        project = get_object_or_404(Project, slug=self.kwargs['slug'])
        context = self.get_context_data()
        formset = context['formset']

        if formset.is_valid():
            self.object = form.save()
            formset.instance = self.object #IdeaFormFormSet

            nouns = project.nouns().values_list('content', flat=True)
            verbs = project.verbs().values_list('content', flat=True)
            error = False
            for form in formset.forms: #For each Idea
                form.instance.project …
Run Code Online (Sandbox Code Playgroud)

python django django-views

8
推荐指数
1
解决办法
5712
查看次数

在Django admin更改/添加页面中显示ForeignKey数据

我正在尝试获取模型的属性以显示在另一个模型的Django管理员更改/添加页面中.这是我的模特:

class Download(model.Model):
    task = models.ForeignKey('Task')

class Task(model.Model):
    added_at = models.DateTimeField(...)
Run Code Online (Sandbox Code Playgroud)

无法切换外键,所以我不能使用Inlines,当然fields = ('task__added_at',)也不能在这里工作.

这样的标准方法是什么?(或者我是否将管理员拉得太远?)

我已经在使用自定义模板,所以如果这是可以做到的答案.但是,我更喜欢在管理员级别这样做.

python django django-models django-admin

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

Django TestCase不在辅助数据库上使用事务

我正在使用Django 1.3.1.我有两个数据库,我的一些模型存在于一个数据库中,一些存在于另一个数据库中.这两个数据库都是contrib.gis.db.backends.postgis数据库.

令我惊讶的是,Django的TestCase并没有回滚我在测试之间在辅助数据库中所做的更改.

在下面的代码中,myproject.models.WellOwner是一个非常简单的模型,基本上只有一个字段"name".路由器说它应该在辅助数据库中.第一次测试中的断言成功,第二次测试失败:

from django.test import TestCase
from myproject.models import WellOwner

class SimpleTest(TestCase):
    def test1(self):
        WellOwner.objects.create(name="Remco")
        self.assertEquals(1, WellOwner.objects.count())  # Succeeds

class SimpleTest2(TestCase):
    def test2(self):
        # I would expect to have an empty database at this point
        self.assertEquals(0, WellOwner.objects.count())  # Fails!
Run Code Online (Sandbox Code Playgroud)

我假设Django将此包装在默认数据库的事务中,但不包含在辅助数据库上.这是一个已知的问题吗?有修复吗?也许在1.4?我的Google-fu失败了.

(如果我在设置中将DATABASE_ROUTERS更改为[],以便所有内容都进入同一个数据库,问题就会消失)

我将添加路由器的整个代码,以防它有用:

SECONDARY_MODELS = ('WellOwner', ...)

import logging
logger = logging.getLogger(__name__)


class GmdbRouter(object):
    """Keep some models in a secondary database."""

    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'gmdb':
            if model._meta.object_name in SECONDARY_MODELS:
                return 'secondary'

        return None

    def db_for_write(self, …
Run Code Online (Sandbox Code Playgroud)

python django multiple-databases

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

Django使用表达式聚合查询

我有一个模型XYZ,我需要获得给定查询集的字段a,b和表达式x/y的最大值.

它适用于田野.就像是:

>>> XYZ.all().aggregate(Max('a'))

... {'a__max': 10}
Run Code Online (Sandbox Code Playgroud)

但是,我无法找到表达式的方法.尝试类似的东西:

>>> XYZ.all().aggregate(Max('x/y'))
Run Code Online (Sandbox Code Playgroud)

给出错误:

*** FieldError: Cannot resolve keyword 'x/y' into field. Choices are: a, b, x, y, id
Run Code Online (Sandbox Code Playgroud)

尝试类似的东西:

>>> XYZ.all().aggregate(Max(F('x')/F('y')))
Run Code Online (Sandbox Code Playgroud)

给出错误:

*** AttributeError: 'ExpressionNode' object has no attribute 'split'
Run Code Online (Sandbox Code Playgroud)

甚至是这样的:

XYZ.all().extra(select={'z':'x/y'}).aggregate(Max('z'))
Run Code Online (Sandbox Code Playgroud)

也不起作用,并给出与上面相同的错误:

FieldError: Cannot resolve keyword 'z' into field. Choices are: a, b, x, y, id
Run Code Online (Sandbox Code Playgroud)

我发现这样做的一个黑客是:

XYZ.all().extra(select={'z':'MAX(x/y)'})[0].z
Run Code Online (Sandbox Code Playgroud)

这实际上是有效的,因为它生成了正确的SQL,但它令人困惑,因为我确实在z atttribute获得了正确的值,但没有正确的实例,即具有该最大值的实例.

当然,我也可以使用带有extra()和order_by()的原始查询或技巧,但是我真的没理由Django以一种很好的方式支持聚合查询,但不能支持表达式甚至有自己的F表达式.

有什么办法吗?

python sql django django-1.3

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

Tastypie - 找不到嵌套资源字段

我有这个代码:

#api model 

class VideoResource(ModelResource):
    class Meta:
        queryset = Video.objects.all()
        include_resource_uri = False
        resource_name = 'video'
        authorization = DjangoAuthorization()

class QuestionResource(ModelResource):

    user = fields.ToOneField(UserResource,'user',full=True)
    video = fields.ForeignKey(VideoResource,'video',full=True)

    class Meta:
        queryset = Question.objects.all()
        resource_name = 'question'
        include_resource_uri = False
        authorization = DjangoAuthorization()

    def obj_create(self, bundle, request=None, **kwargs):
        import json
        temp = json.loads(request.body, object_hook=_decode_dict)
        video = Video.objects.get(pk=temp['video'])
        return super(QuestionResource, self).obj_create(bundle, request, user=request.user, video=video)

#model

class Question(models.Model):
    text = models.CharField('Question',max_length=120)
    created = models.DateTimeField(auto_now_add=True)
    enabled = models.BooleanField(default=True)
    flag = models.BooleanField(default=False)
    allow_comments = models.BooleanField(default=True)
    thumbnail_url …
Run Code Online (Sandbox Code Playgroud)

python django tastypie

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

如何将模型移动到Django网站管理员的其他部分

是否可以将默认组模型从"身份验证和授权"部分(在Django管理站点上)移动到自定义模型以及如何实现?

让我们从另一个词开始.

我的Django项目中有一个非常简单的应用程序'accounts'.

models.py文件如下所示:

from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    def __str__(self):
        return self.email
Run Code Online (Sandbox Code Playgroud)

serializers.py文件:

from rest_framework import serializers
from django.contrib.auth.models import Group
from django.contrib.auth import get_user_model


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group


class UserSerializer(serializers.HyperlinkedModelSerializer):
    groups = serializers.HyperlinkedRelatedField(
        many=True,
        required=False,
        read_only=True,
        view_name="group-detail"
    )

    class Meta:
        model = get_user_model()
        exclude = ('user_permissions',)
Run Code Online (Sandbox Code Playgroud)

现在,在管理站点上,我有两个部分:"帐户"和"身份验证和授权"."帐户"部分包含我的"用户"表(用户模型)和"身份验证和授权"部分包含"组"表(适用于Django的默认授权组模型).

我的问题是 - 是否可以以及如何将Groups表(模型)移动到'Accounts'部分?

我甚至试图基于Django的默认auth Group模型创建一个自定义的"Group"模型,但一直坚持迁移异常.

python django model admin

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

Queryset API distinct()不起作用?

class Message(models.Model):
    subject = models.CharField(max_length=100)
    pub_date = models.DateTimeField(default=datetime.now())

class Topic(models.Model):
    title = models.CharField(max_length=100)
    message = models.ManyToManyField(Message, verbose_name='Discussion') 
Run Code Online (Sandbox Code Playgroud)

我想根据附加到该主题的最新消息对象来获取所有主题的顺序.我执行了这个查询,但这并没有给出不同的查询集.

>> Topic.objects.order_by('-message__pub_date').distinct()
Run Code Online (Sandbox Code Playgroud)

python django

6
推荐指数
2
解决办法
6021
查看次数

RabbitMQ/Celery与Django挂起延迟/准备/等 - 没有有用的日志信息

所以我只是设置celery和rabbitmq,创建我的用户,设置vhost,将用户映射到vhost,并成功运行celery守护进程(或者我假设)

(queuetest)corky@corky-server:~/projects/queuetest$ ./manage.py celeryd
 celery@corky-server v0.9.5 is starting.
 Configuration ->
. broker -> amqp://celery@localhost:5672/
. queues ->
. celery -> exchange:celery (direct) binding:celery
. concurrency -> 2
. loader -> celery.loaders.djangoapp
. logfile -> [stderr]@WARNING
. events -> OFF
. beat -> OFF

Celery has started.
Run Code Online (Sandbox Code Playgroud)

我创造了一个"芹菜"的用户,因为在这种情况下我并没有感觉很有创造力.

当我尝试在芹菜文档中做一个简单的例子时:

>>> from tasks import add
>>> r = add.delay(2, 2)
>>> r
<AsyncResult: 16235ea3-c7d6-4cce-9387-5c6285312c7c>
>>> r.ready()
(hangs for eternity.)
Run Code Online (Sandbox Code Playgroud)

所以我检查了常见问题解答,想知道还有什么可能会起来,它告诉我这是一个由于用户权限而导致的常见错误,所以我三重检查那些,没有,做了另一个新用户,仍然没有.如果我DjangoBrokerConnection从中导入carrot.connection并获取信息,它会与我的芹菜设置中的内容相匹配.常见问题解答说明了检查您的日志文件.

我的rabbit.log文件在这种情况下不是很有用,只是显示:

=INFO REPORT==== 26-Jan-2010::11:58:22 ===
accepted …
Run Code Online (Sandbox Code Playgroud)

python django rabbitmq celery

6
推荐指数
1
解决办法
2358
查看次数

Django,什么是最好的,最快的方式来获得第一个和最后一个元素,Customer.objects.xxxx

Django,什么是最好的,最快的方式来获得第一个和最后一个元素,Customer.objects.xxxx这样的过滤器,value_list或...

python django django-models

6
推荐指数
1
解决办法
3080
查看次数