我试图在django管理内联中过滤外键字段中显示的选项.因此,我想访问正在编辑的父对象.我一直在研究,但找不到任何解决方案.
class ProjectGroupMembershipInline(admin.StackedInline):
model = ProjectGroupMembership
extra = 1
formset = ProjectGroupMembershipInlineFormSet
form = ProjectGroupMembershipInlineForm
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == 'group':
kwargs['queryset'] = Group.objects.filter(some_filtering_here=object_being_edited)
return super(ProjectGroupMembershipInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我已经验证了编辑对象时kwargs是空的,所以我无法从那里获取对象.
有什么帮助吗?谢谢
我对数据库编程很陌生,我想知道索引的负面影响是什么?据我所知,索引加速了必须在数据库中搜索特定值的操作(例如SELECT).
考虑这个例子:
对于表Example,在列上有索引user_name,操作:
SELECT TestField FROM Example WHERE user_name=XXXX
Run Code Online (Sandbox Code Playgroud)
由于索引会更快.
我的问题是:使用索引的缺点是什么?如果一个索引只给我们专业人士(性能提升),他们为什么不设置为默认值?
我正在应用 post_save 信号来应用每个对象的用户权限,然后相应地过滤查询集。
我的模型是这样的:
class Project(models.Model):
# Relations with other entities.
employees = models.ManyToManyField('staff.Person', through='project.PersonProjectMembership',
related_name='projects')
research_groups = models.ManyToManyField('group.Group', related_name='projects',
through='project.ProjectGroupMembership')
departments = models.ManyToManyField('department.Department', related_name='projects',
through='project.ProjectDepartmentMembership')
Run Code Online (Sandbox Code Playgroud)
问题是:当我捕捉到保存后的信号时,虽然我已经输入了部门、研究组和员工的值,但它们似乎总是为空。有什么我错过的吗?
更新:在当前代码下方,尚未按预期工作。我已经通过 m2m_changed 更改了 post_save。
from django.db.models.signals import m2m_changed
from django.db import models
from django.dispatch.dispatcher import receiver
class Project(models.Model):
employees = models.ManyToManyField('staff.Person', through='project.PersonProjectMembership',
related_name='projects')
class PersonProjectMembership(models.Model):
project = models.ForeignKey('project.Project', related_name="person_memberships")
person = models.ForeignKey('staff.Person', related_name="project_memberships")
lead = models.BooleanField(default=False)
position = models.CharField(max_length=50)
project_manager = models.BooleanField(
default=False
)
class Meta:
permissions = (
('view_personprojectmembership', _('View person project …Run Code Online (Sandbox Code Playgroud) 我在 django admin 中的表单有一个奇怪的问题。
我已经定义了我的表单、模型和 modeladmin:
import datetime
from cmsplugin_news.admin import NewsAdmin as OldNewsAdmin
from django import forms
from django.db import models
from news.models import News
class NewNewsForm(forms.ModelForm):
class Meta:
model = News
fields = ('title', 'is_published', 'pub_date', 'is_featured')
class NewsAdmin(OldNewsAdmin ):
fields = ('title', 'is_published', 'pub_date', 'is_featured')
form = NewNewsForm
class News(models.Model):
title = models.CharField(_('Title'), max_length=255)
is_published = models.BooleanField(_('Published'), default=False)
pub_date = models.DateTimeField(_('Publication date'), default=datetime.datetime.now)
is_featured = models.BooleanField(_('Featured'), default=False)
admin.site.register(News, NewsAdmin)
Run Code Online (Sandbox Code Playgroud)
模型中的所有字段似乎也出现在管理和表单中。但是当我前往 /en/admin/news/news/4/ 时,我收到以下 KeyError: key "is_featured" not found …
我已经开始在我的 Django 项目中使用 tinymce。我需要启用一些与 django-tinymce 捆绑在一起的插件(例如,模板)。因此,在我的 settings.py 中,我添加了以下配置:
TINYMCE_DEFAULT_CONFIG = {
'theme': 'advanced', 'relative_urls': False,
'plugins': 'template',
'toolbar': 'template'
}
MAX_UPLOAD_SIZE = 512000
Run Code Online (Sandbox Code Playgroud)
认为他们可能会启用模板插件,但似乎没有。如何在 django-tinymce 中启用插件?我没有在任何地方找到这个。
感谢您的建议!
更新:
我想我误解了配置是如何完成的。我用一些配置创建了一个 config.js:
tinyMCE.init({
theme: 'advanced',
plugins: 'template',
height: '350px',
width: '1000px'
});
Run Code Online (Sandbox Code Playgroud)
然后,我从 MyModelAdmin.Media 链接它。(我正在从 django-admin 加载编辑器。)
class MyModelAdmin(ModelAdmin):
class Media:
from django.conf import settings
js = (
settings.STATIC_URL + 'tiny_mce/config.js',
)
Run Code Online (Sandbox Code Playgroud)
config.js 似乎正确加载,但我看不出任何区别。
我创建了一个sqlite db并将其上传到托管.
然后我从我的脚本中检索它并尝试插入一些数据,但execute()返回一个
DatabaseError (file is encrypted or is not a database).
urllib.urlretrieve('http://%s/%s' % (HOST, NAME_DB), NAME_DB)
con = sqlite3.connect(NAME_DB)
cur = con.cursor()
cur.execute('insert into log(date, count, average) values(date("now"), ?, ?)', (1, 1.2))
con.commit()
con.close()
Traceback (most recent call last):
File "mylog.py", line 17, in <module>
cur.execute('insert into log(date, count, average) values(date("now"), ?, ?)', (1, 1.2))
sqlite3.DatabaseError: file is encrypted or is not a database
Run Code Online (Sandbox Code Playgroud)
如果我使用sqlite CLI插入数据,则不会发生此类错误.请你帮助我好吗?
我对django守护者有些问题.我有一个新闻模型定义
class News(models.Model):
title = models.CharField(_('Title'), max_length=255)
slug = models.SlugField(_('Slug'), unique_for_date='pub_date',)
objects = models.Manager()
featured = FeaturedNewsManager()
link = models.URLField(_('Link'), blank=True, null=True,)
class Meta:
permissions = (('view_news', _('view news')))
Run Code Online (Sandbox Code Playgroud)
然后我尝试将view_news权限分配给我的一个用户,我收到以下错误:
>>> from guardian.shortcuts import assign_perm
>>> g = Group.objects.latest('pk')
>>> n = News.objects.get(pk=4)
>>> assign_perm( 'news.view_news', g, n)
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/home/roberto/.virtualenvs/ve_news/local/lib/python2.7/site-packages/guardian/shortcuts.py", line 93, in assign_perm
return model.objects.assign_perm(perm, group, obj)
File "/home/roberto/.virtualenvs/ve_news/local/lib/python2.7/site-packages/guardian/managers.py", line 90, in assign_perm
permission = Permission.objects.get(content_type=ctype, codename=perm)
File …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的应用程序从 Django v1.6.11 升级到 v1.7.8。我按照说明从南方升级,但一次又一次遇到相同的错误。更确切地说:
\n\n$ python manage.py migrate makemigrations\n/home/roberto/virtualenvs/ve_unicms-django1.7/local/lib/python2.7/site-packages/reversion/admin.py:385: RemovedInDjango18Warning: commit_on_success is deprecated in favor of atomic.\n def recover_view(self, request, version_id, extra_context=None):\n\n/home/roberto/virtualenvs/ve_unicms-django1.7/local/lib/python2.7/site-packages/reversion/admin.py:397: RemovedInDjango18Warning: commit_on_success is deprecated in favor of atomic.\n def revision_view(self, request, object_id, version_id, extra_context=None):\n\n/home/roberto/virtualenvs/ve_unicms-django1.7/local/lib/python2.7/site-packages/django/forms/widgets.py:143: RemovedInDjango18Warning: `VersionMetaAdmin.queryset` method should be renamed `get_queryset`.\n .__new__(mcs, name, bases, attrs))\n\n/home/roberto/virtualenvs/ve_unicms-django1.7/local/lib/python2.7/site-packages/cms/publisher/manager.py:5: RemovedInDjango18Warning: `PublisherManager.get_query_set` method should be renamed `get_queryset`.\n class PublisherManager(models.Manager):\n\n/home/roberto/virtualenvs/ve_unicms-django1.7/local/lib/python2.7/site-packages/cms/models/managers.py:15: RemovedInDjango18Warning: `PageManager.get_query_set` method should be renamed `get_queryset`.\n class PageManager(PublisherManager):\n\n/home/roberto/virtualenvs/ve_unicms-django1.7/local/lib/python2.7/site-packages/cms/admin/change_list.py:39: RemovedInDjango18Warning: `CMSChangeList.get_query_set` method should be renamed `get_queryset`.\n class CMSChangeList(ChangeList):\n\n/home/roberto/virtualenvs/ve_unicms-django1.7/local/lib/python2.7/site-packages/cms/admin/forms.py:397: RemovedInDjango18Warning: Creating …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用whoosh作为引擎来设置django-haystack。如本文所述,在建立第一个索引时发生了我的问题。
鉴于我的staff / models.py:
class Person(models.Model):
first_name = models.CharField(_('first name'), max_length=30, blank=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
def __unicode__(self):
return '%s %s' % ( self.first_name, self.last_name)
Run Code Online (Sandbox Code Playgroud)
我已经写了职员/indexes.py:
from haystack import indexes
from staff.models import Person
class PersonIndex(indexes.SearchIndex, indexes.Indexable):
first_name = indexes.CharField(model_attr='first_name')
last_name = indexes.CharField(document=True, model_attr='last_name')
def get_model(self):
return Person
Run Code Online (Sandbox Code Playgroud)
然后,将以下配置添加到mycms / settings.py中,以将whoosh用作引擎:
import os
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
},
}
Run Code Online (Sandbox Code Playgroud)
后者是从教程中逐字逐句地获取的。然后,我为索引添加了一个简单的文本模板,即mycms / templates / search / indexes …
在我们的项目中,我们正在从WebSphere 7(Java 6)迁移到8.5.5.9(Java 8).我们选择了这个精确版本,因为它支持Java 8.
不知何故,我们只使用SDK 1.6安装了8.5.5.9.
除了默认的WAS 8.5.5.9设置之外,是否还有与IBM Installation Manager一起安装的特殊修补程序?
提前致谢.
python ×8
django ×7
django-admin ×3
django-forms ×1
django-south ×1
indexing ×1
java ×1
java-8 ×1
mysql ×1
permissions ×1
select ×1
signals ×1
sql ×1
sqlite ×1
tinymce ×1
websphere ×1
websphere-8 ×1
whoosh ×1