1

我有两个模型:

class ArticleTemplate(models.Model):
    title = models.CharField(max_length=250)
    text = models.TexField()
    [...]
    owner = models.ForeignKey(user)

class Article(models.Model):
    template = models.ForeignKey(ArticleTemplate)
    title = models.CharField(max_length=250)
    text = models.TexField()
    [...]
    owner = models.ForeignKey(user)

以及文章的形式:

class ArticleForm(models.Model):
    class Meta:
        model = Article
        fields = ('id', 'template', 'title', 'text')

但是选择向我显示了所有模板,以及那些不属于 request.user 的模板。

如何仅显示分配给登录用户的数据?

4

2 回答 2

1

您可以通过在视图中调用 queryset 来过滤 Django ModelForm 中的外键选择:

form.template.queryset = ArticleTemplate.objects.filter(owner=request.user)
于 2013-04-24T10:07:18.283 回答
0

__init__向 ArticleForm添加一个方法:

def __init__(self, *args, **kwargs):
    logged_user = kwargs.pop("logged_user")
    super(ArticleForm, self).__init__(*args, **kwargs)
    templates = logged_user.article_template_set.all()
    self.fields['template'].queryset = templates

从视图:

form = ArticleForm(logged_user=request.user) #GET request

form = ArticleForm(request.POST, logged_user=request.user) #POST
于 2013-04-24T10:31:56.747 回答