2

我知道它在某个地方,但我找不到它。

所以我有一个“类别”模型和一个“书”模型,它有一个多对多的“类别”。在模型表单中创建新书时,所有类别都会呈现给用户以分配给该书。在这种情况下,我只希望当前用户创建的类别显示在该字段中,而不是所有类别。

最好的方法是什么?

4

1 回答 1

7

假设您的模型如下:

class Category(models.Model):
    ....
    creator = models.ForeignKey(User)

class Book(models.Model):
    ...
    categories = models.ManyToManyField(Category)

假设您的表格如下:

class BookForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        current_user = kwargs.pop('user')
        super(BookForm, self).__init__(*args, **kwargs)
        self.fields['categories'].queryset = Categories.objects.filter(creator=current_user)

因此,您需要覆盖__init__您的表单,将当前用户传递给此表单。然后在你想要的 ManyToManyField 上设置一个queryset属性。

您的看法:

#GET request
book_form = BookForm(user=request.user)

#POST request
book_form = BookForm(data=request.POST, user=request.user)
于 2013-04-22T06:32:01.893 回答