根据django中的request.user限制外键值

时间:2017-03-05 12:57:16

标签: django

我在博客应用程序中声明了一个模型类别和一个模型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的类别。 (帖子作者可以选择他创建的仅后期类别类别。)

你的方法是什么?

提前致谢!

1 个答案:

答案 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)