我正在开发一个多租户应用程序,其中一些用户可以定义自己的数据字段(通过管理员)以收集表单中的其他数据并报告数据.后一位使JSONField不是一个很好的选择,所以我有以下解决方案:
class CustomDataField(models.Model):
"""
Abstract specification for arbitrary data fields.
Not used for holding data itself, but metadata about the fields.
"""
site = models.ForeignKey(Site, default=settings.SITE_ID)
name = models.CharField(max_length=64)
class Meta:
abstract = True
class CustomDataValue(models.Model):
"""
Abstract specification for arbitrary data.
"""
value = models.CharField(max_length=1024)
class Meta:
abstract = True
Run Code Online (Sandbox Code Playgroud)
请注意CustomDataField如何具有ForeignKey to Site - 每个站点将具有一组不同的自定义数据字段,但使用相同的数据库.然后,各种具体数据字段可以定义为:
class UserCustomDataField(CustomDataField):
pass
class UserCustomDataValue(CustomDataValue):
custom_field = models.ForeignKey(UserCustomDataField)
user = models.ForeignKey(User, related_name='custom_data')
class Meta:
unique_together=(('user','custom_field'),)
Run Code Online (Sandbox Code Playgroud)
这导致以下用途:
custom_field = UserCustomDataField.objects.create(name='zodiac', site=my_site) #probably created …Run Code Online (Sandbox Code Playgroud) 我有这个代码
{% for account in object_list %}
<tr>
{% for field, value in book.get_fields %}
<th>{{ field.verbose_name }}</th>
{% endfor %}
</tr>
{{ break }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我想在第一次迭代后打破for循环.休息不起作用
我最近开始使用django管理一个使用twisted.web多年来有机增长的大型现有应用程序.我开始尝试使用django,它是自动管理界面,我对结果非常满意.
对我来说似乎缺少的一件事是能够为用户提供对数据的只读访问权限.例如,我们有一个角色,允许人们登录并创建采购订单.他们还需要能够查看,但不能编辑其他客户端或产品数据.
如何在django admin中创建"查看"权限,以便用户可以修改某些表的数据,同时只读取其他表的访问权限?
更新:Django Admin似乎给了我CRUD界面的CUD.如何获取具有关联权限和组的只读部分?
更新2010年2月12日:Django 1.2现在将包含只读.详情如下.
我猜我回答了自己的问题.将内容下移到下面的真实答案.
我通过管理界面向用户添加了一些权限.
由于某些原因,所有烫发功能都失败了,例如
>>> user.get_all_permissions()
set([])
Run Code Online (Sandbox Code Playgroud)
但直接访问表,工作:
>>> user.user_permissions.all()
(list of permissions as expected)
Run Code Online (Sandbox Code Playgroud)
什么可以导致"get_all_permissions"(和所有的perm函数,如has_perm())失败?
谢谢
django django-admin django-authentication django-permissions
我目前正在开发一个Django应用程序,它将利用臭名昭着的"分页"技术.我想弄清楚django.core.paginator模块是如何工作的.
我有一个带有问题模型的应用程序.我将使用此分页器列出所有问题.每页将有20个问题.
def show_question(question_pk):
questions = Question.objects.all()
paginator = Paginator(questions, 20)
page = ... # Somehow figure out which page the question is on
return render_to_response('show_question.html', { 'page' : page })
Run Code Online (Sandbox Code Playgroud)
在视图中,在这里我列出了不同的页面为"... 2,3,4,5,6,......"我想以某种方式突出显示当前页面,像很多做网页.
我真的想知道两件事:
编辑:对不起,我忘记了这个问题的一部分.我也想要除了当前页面之外的任何页面都是链接/questions/{{ that_page.start_index }}.所以基本上每个页面链接都会链接到该页面上的第一个问题.
我有一个模型class Project,对于每个模型实例,应该有一个可以编辑该实例的"组"用户.我想我可以添加另一个名为ProjectEditor的模型类来添加这些编辑器.有没有更好的方法来实现这个?检查权限怎么样?我也需要写自己的权限方法,对吧?
谢谢Eric
我ctypes在python中使用模块来加载一个包含线程本地存储的共享c库.它是一个历史悠久的大型c库,我们正在努力使线程安全.该库包含许多全局变量和静态,因此我们对线程安全的初始策略是使用线程本地存储.我们希望我们的libarary与平台无关,并且在win32,win64和64位Ubuntu上编译和测试线程安全性.从纯粹的c-process开始,似乎没有任何问题.
但是在win32和Ubuntu的python(2.6和2.7)中,我们看到了内存泄漏.当python线程终止时,似乎没有正确释放线程本地存储.或者至少在某种程度上,python进程没有"意识到"内存被释放.实际上在win32上的ac#-program中也可以看到同样的问题,但是我们的win64服务器测试机器上也没有这个问题(也运行python 2.7).
这个问题可以用这样一个简单的玩具例子重现:
创建一个包含(linux/unix删除__declspec(dllexport))的c文件:
#include <stdio.h>
#include <stdlib.h>
void __declspec(dllexport) Leaker(int tid){
static __thread double leaky[1024];
static __thread int init=0;
if (!init){
printf("Thread %d initializing.", tid);
int i;
for (i=0;i<1024;i++) leaky[i]=i;
init=1;}
else
printf("This is thread: %d\n",tid);
return;}
Run Code Online (Sandbox Code Playgroud)
MINGW在Linux上的windows/gcc上编译机智如:
gcc -o leaky.dll(或leaky.so)-shared the_file.c
在Windows上,我们可以用Visual Studio编译,替换__thread为__declspec(thread).但是在win32上(我相信winXP),如果要在运行时加载库,这将不起作用LoadLibrary.
现在创建一个python程序,如:
import threading, ctypes, sys, time
NRUNS=1000
KEEP_ALIVE=5
REPEAT=2
lib=ctypes.cdll.LoadLibrary("leaky.dll")
lib.Leaker.argtypes=[ctypes.c_int]
lib.Leaker.restype=None
def UseLibrary(tid,repetitions):
for i …Run Code Online (Sandbox Code Playgroud) 我想做一个函数来获取结构上的指针.我这样做了:
void *getTokenList() {
static t_token *list;
return &list;
}
Run Code Online (Sandbox Code Playgroud)
在编译时,我有这个警告:
warning: variable ‘list’ set but not used [-Wunused-but-set-variable]
是否可以为此功能禁用此警告(仅此一项),或者在此变量上放置GCC属性以隐藏此警告?
我放在#pragma GCC diagnostic ignored "-Wunused-but-set-variable"我的文件顶部,但我想在此函数中仅为此变量隐藏此警告.
谢谢,让
我正在尝试编写一个规则来将所有URL重定向到一个临时页面,以便可以完成某些站点更新,但最终会以无限循环结束.
RewriteCond %{HTTP_HOST} ^(.*)mysite\.com$
RewriteCond %{REQUEST_URI} !^(.*)temp$
RewriteRule ^(.*)$ http://www.mysite.com/temp [R=307,L]
Run Code Online (Sandbox Code Playgroud)
如何检查它是否是临时页面?
我有一个应用程序,我有很多实例将单个html选择的用户选择传递给表单字段没有问题,但我在多选案例中努力做同样的事情.似乎该JQuery.val()函数正在创建一个正确的数据数组,但我在服务器上的formfield显示一个空字符串.我继承了这个应用程序,并且在某种程度上是一个菜鸟.
相关的javascript函数是
$('.exemptionfield').change(function() {
var exemptionfield = $(this)
$.ajax({
url: '/form/ASubstanceExemption',
type: 'POST',
data: {
sclId: $('#sclId').val(),
substance: exemptionfield.attr('id'),
exemption: exemptionfield.val()
}
})
})
Run Code Online (Sandbox Code Playgroud)
表格看起来像
class ASubstanceExemption(forms.Form):
buttonTitle = 'submit'
title = 'not used'
sclId = forms.IntegerField()
substance = forms.CharField()
exemption = forms.MultipleChoiceField(required=False,
choices=kExemptions)
def handle(self, *args, **kwargs):
sclId = self.cleaned_data['sclId']
substance = self.cleaned_data['substance']
exemption = self.cleaned_data['exemption']
print exemption
etc...
Run Code Online (Sandbox Code Playgroud)
HTML选择看起来像
<select multiple size="5" class="exemptionfield" id="Lead/lead compounds">
<option value="1(a)">
1(a)
</option>
<option value="1(b)">
1(b)
</option>
<option value="1(c)">
1(c) …Run Code Online (Sandbox Code Playgroud) django ×7
django-admin ×2
python ×2
.htaccess ×1
apache2 ×1
c ×1
ctypes ×1
django-forms ×1
django-views ×1
dynamic ×1
for-loop ×1
gcc ×1
hide ×1
jquery ×1
memory-leaks ×1
mod-rewrite ×1
multi-select ×1
permissions ×1
redirect ×1
warnings ×1