我正在使用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部分?
谢谢!
在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) 我正在尝试获取模型的属性以显示在另一个模型的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',)也不能在这里工作.
这样的标准方法是什么?(或者我是否将管理员拉得太远?)
我已经在使用自定义模板,所以如果这是可以做到的答案.但是,我更喜欢在管理员级别这样做.
我正在使用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) 我有一个模型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表达式.
有什么办法吗?
我有这个代码:
#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) 是否可以将默认组模型从"身份验证和授权"部分(在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"模型,但一直坚持迁移异常.
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) 所以我只是设置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) Django,什么是最好的,最快的方式来获得第一个和最后一个元素,Customer.objects.xxxx这样的过滤器,value_list或...
django ×10
python ×10
django-admin ×2
admin ×1
celery ×1
django-1.3 ×1
django-views ×1
model ×1
rabbitmq ×1
sql ×1
tastypie ×1