Django用户的会话变得混乱。

时间:2011-07-31 01:18:56

标签: django django-admin

在Django的管理界面中,有一个特定模型的表单,我希望以不同的方式呈现,具体取决于访问此表单的登录用户是普通用户还是管理员。除了一件巨大的事情之外,它正在寻找它:它变得混杂了。例如,管理员应该可以编辑的字段是只读的,在我之前就已经以“普通”用户身份登录。如果我在重新启动服务器后立即尝试完全相同的东西,工作正常,所有字段都是可编辑的。我想不知怎的,用户的会话混淆了。如何处理?

我有:

在App的admin.py中:

151 class AdminForm(ModelForm):
152     class Meta:
153         model = PromotionalSlot
154         exclude = ['deal']
155 
156 class NormalUserForm(ModelForm):
157     class Meta:
158         model = PromotionalSlot
159         exclude = ['site']
160         
161 class PromotionalSlotAdmin(admin.ModelAdmin):
162      def get_form(self, request, obj=None, **kwargs):
163         if request.user.is_superuser:
164             return AdminForm
165         else:
166             self.readonly_fields = ['start_date','end_date','level','city','status']
167             return NormalUserForm· 
168
169 admin.site.register(models.PromotionalSlot, PromotionalSlotAdmin)

由于

1 个答案:

答案 0 :(得分:2)

问题是您的解决方案不是线程安全的。 Django保留了管理实例,因此您设置为self.readonly_fields的值也用于线程中的所有后续请求。这就是你如何使其线程安全:

class PromotionalSlotAdmin(admin.ModelAdmin):

    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            return []
        else:
            return ['start_date', 'end_date', 'level', 'city', 'status']

    def get_form(self, request, obj=None, **kwargs):
        if request.user.is_superuser:
            return AdminForm
        else:
            return NormalUserForm