我在博客应用程序中声明了一个模型类别和一个模型Post:
class Category(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(User)
desc = models.TextField(max_length=200, default='')
class Post(models.Model):
author = models.ForeignKey(User)
title = models.CharField(max_length=200)
category = models.ForeignKey(Category, default=1)
text = models.TextField()
我想要的是将Post模型中的类别外键限制为Category.author = Post.author的类别。 (帖子作者可以选择他创建的仅后期类别类别。)
你的方法是什么?
提前致谢!
答案 0 :(得分:2)
在数据库级别的ForeignKey
字段上强制执行选择的一种方法是使用limit_choices_to
参数。
您不能这样做来限制category
,因为queryset取决于请求。
但您可以在ModelForm中访问请求对象。因此,您必须覆盖ModelForm的__init__
来为category
定义自定义查询集。
class PostForm(forms.ModelForm):
class Meta:
model = Post
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super(PostForm, self).__init__(*args, **kwargs)
self.fields['category'].queryset = Category.objects.filter(author=user)