我的管理员看起来像这样(没有排除变量):
class MovieAdmin(models.ModelAdmin)
fields = ('name', 'slug', 'imdb_link', 'start', 'finish', 'added_by')
list_display = ('name', 'finish', 'added_by')
list_filter = ('finish',)
ordering = ('-finish',)
prepopulated_fields = {'slug': ('name',)}
form = MovieAdminForm
def get_form(self, request, obj=None, **kwargs):
form = super(MovieAdmin, self).get_form(request, obj, **kwargs)
form.current_user = request.user
return form
admin.site.register(Movie, MovieAdmin)
表格:
class MovieAdminForm(forms.ModelForm):
class Meta:
model = Movie
def save(self, commit=False):
instance = super(MovieAdminForm, self).save(commit=commit)
if not instance.pk and not self.current_user.is_superuser:
if not self.current_user.profile.is_manager:
instance.added_by = self.current_user.profile
instance.save()
return instance
我正在尝试删除用户的 added_by 字段,因为我更愿意从 session 中填充它。我尝试了以下方法:
然而,我得到的每一个:
KeyError while rendering: Key 'added_by' not found in Form
.似乎我需要在表单渲染过程中更早地删除该字段,但我被困在何处执行此操作。那么如何排除
added_by
普通用户的领域?
最佳答案
在评估 list_display 时,您可能会收到该错误。您无法显示已排除的字段。去掉了 added_by 的版本也需要对应的 list_display。
def get_form(self, request, obj=None, **kwargs):
current_user = request.user
if not current_user.profile.is_manager:
self.exclude = ('added_by',)
self.list_display = ('name', 'finish')
form = super(MovieAdmin, self).get_form(request, obj, **kwargs)
form.current_user = current_user
return form
关于Django:如何从特定用户的管理表单中删除字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271490/