我为我的应用程序扩展了Django管理站点,允许非员工/超级用户访问.这工作得很好.
我为现有模型创建了一个代理模型,并将其注册到我的管理站点,但是,对于非员工用户,它不会出现.从我阅读的文档中,我的理解是代理模型获得了自己的权限.我检查过,这些没有出现在可用权限列表中.
这是我的代码,以防它有用:
正常模型
class Engagement(models.Model):
eng_type = models.CharField(max_length=5)
environment = models.CharField(max_length=8)
is_scoped = models.BooleanField()
class Meta:
ordering = ['eng_type', 'environment']
app_label = 'myapp'
Run Code Online (Sandbox Code Playgroud)
代理模型
class NewRequests(Engagement):
class Meta:
proxy = True
app_label = 'myapp'
verbose_name = 'New Request'
verbose_name_plural = 'New Requests'
Run Code Online (Sandbox Code Playgroud)
模特管理员
class NewRequestsAdmin(ModelAdmin):
pass
def queryset(self, request):
return self.model.objects.filter(is_scoped=0)
Run Code Online (Sandbox Code Playgroud)
自定义管理员注册
myapps_admin_site.register(NewRequests, NewRequestsAdmin)
Run Code Online (Sandbox Code Playgroud)
我一直在和南方管理我的数据库.根据这篇文章,您必须按照它指向用户的说明稍微篡改它.这是一次失败.我的数据库中没有很多信息,因此我取消注释南并运行常规syncdb以排除South.不幸的是,这仍然没有用,我不知所措.任何帮助表示赞赏.
编辑
这是在Django 1.4上
我正在尝试--autogenerate使用 Alembic 为两个模型创建一个修订版,但收到重复的表键错误。是否需要指定模式?如果可以,如何设置?我读过的文档说要使用__table_args__ = {'schema': 'somename'},但这并没有帮助。非常感谢任何提示或建议。
我目前的设置是:
基础文件
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
Run Code Online (Sandbox Code Playgroud)
工作区.py
from sqlalchemy import Column, Integer, String
from base import Base
class WorkspaceModel(Base):
__tablename__ = 'workspaces'
id = Column(Integer, primary_key=True)
name = Column(String)
Run Code Online (Sandbox Code Playgroud)
主机.py
from sqlalchemy import Column, Integer, String
from base import Base
class HostModel(Base):
__tablename__ = 'hosts'
id = Column(Integer, primary_key=true)
ip = Column(String)
Run Code Online (Sandbox Code Playgroud)
alembic/env.py
from host import HostModel
from workspace import WorkspaceModel
target_metadata = [HostModel.metadata, WorkspaceModel.metadata]
Run Code Online (Sandbox Code Playgroud)
错误
ValueError: …Run Code Online (Sandbox Code Playgroud) 我有一个代理模型,其查询集是其父项的子集.但是,当我调用它时,会返回父对象.
模特经理:
class NewRequestsManager(models.Manager):
def get_queryset(self):
return super(NewRequestsManager, self).get_queryset().filter(is_scoped=0)
Run Code Online (Sandbox Code Playgroud)
代理模型:
class NewRequests(Engagement):
objects = NewRequestsManager()
class Meta:
proxy = True
app_label = 'myapp'
verbose_name = 'New Request'
Run Code Online (Sandbox Code Playgroud)
查看:
def list(request):
new_requests = NewRequests.objects.all()
c = RequestContext(request, {
'cl': new_requests,
})
t = loader.get_template('queue.html')
return HttpResponse(t.render(c))
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.我不确定我在这里缺少什么.
我是Git的新手.我打开了Github帐户,创建了一个公共存储库,并设置了用户名和电子邮件,如Github的教程所示.因此,如果有人知道我的用户名和电子邮件,他们可以提交或推送我的公共存储库中的文件吗?我该如何保护文件?SVN具有用于提交文件的用户名密码.我怎样才能做到这一点?
我很难理解为什么我的一个查询失败了。
我正在使用 pyodbc 连接到 Django 应用程序上的 SQL Server 数据库。我的所有其他查询都工作正常,除了一个。以下是相关信息:
模型
class ReportTemplate(models.Model):
name = models.TextField(db_column='Name', blank=True)
template = models.TextField(db_column='Template', blank=True)
class Meta:
db_table = 'ReportTemplateTbl'
Run Code Online (Sandbox Code Playgroud)
功能
我在下面的示例中使用了“抽象”,因为它是一个已知值。
get_initial(self):
my_template = ReportTemplate.objects.get(name='Abstract')
return {'abstract': my_template.template}
Run Code Online (Sandbox Code Playgroud)
错误
当应用程序通过这个函数运行时,它返回以下错误:
('42S22', "[42S22] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]无效的列名 'id'。(207) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server 驱动程序][SQL服务器]无法准备语句。(8180)")
变量信息似乎表明 pyodb 正在尝试搜索
u'SELECT [ReportTemplateTbl].[id] , [ReportTemplateTbl].[Name], [ReportTemplateTbl].[Template] FROM [ReportTemplateTbl] WHERE [ReportTemplateTbl].[Name] = ? '
我真的很想了解我在这里做错了什么,并试图避免进行手动查询。提前致谢!
django ×3
python ×2
alembic ×1
django-admin ×1
django-south ×1
django-views ×1
git ×1
git-svn ×1
github ×1
pyodbc ×1
python-2.7 ×1
sql-server ×1
sqlalchemy ×1