标签:
环境:
zinnia版本是0.14.2, django 1.6
zinnia支持多用户发博文,但需要自己实现。
现在需要,每个用户有自定义的分类,自己编辑属于自己的category,发布文章时,只能选择自己的category。
在/zinnia/admin/forms.py中,使用模块crum读取用户id,进行category的过滤,不被推荐,而且容易出错。
EntryAdminForm类中,定义了一个categories字段:
categories = MPTTModelMultipleChoiceField( label=_('Categories'), required=False, queryset=Category.objects.all(), widget=MPTTFilteredSelectMultiple(_('categories'), False, attrs={'rows': '10'}))
在/zinnia/admin/entry.py里,重写一下admin.ModelAdmin的add_view方法:
def add_view(self, request, form_url='', extra_context=None): self.form.declared_fields['categories'].queryset = Category.objects.filter(user_id=request.user.id) response = super(EntryAdmin, self).add_view(request, form_url, extra_context) return response
这里要访问categories字段,使用 declared_fileds列表。form的定义是: form = EntryAdminForm
这个方法要返回父级方法的结果。
另:
在Category表中添加user字段:
user = models.ForeignKey(User, related_name='user_id')
重写一下/zinnia/admin/category.py中的save_model方法:
def save_model(self, request, category, form, change): category.user_id = request.user.id category.save()
重写get_queryset方法:
def get_queryset(self, request): qs = Category.objects.filter(user_id=request.user.id) return qs
标签:
原文地址:http://blog.csdn.net/fengyu09/article/details/42834039