Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何在select中仅显示一些数据?_Django_Django Forms - Fatal编程技术网

Django 如何在select中仅显示一些数据?

Django 如何在select中仅显示一些数据?,django,django-forms,Django,Django Forms,我有两种型号: 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) t

我有两种型号:

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')
但是select会显示所有模板,以及那些不属于request.user的模板


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

您可以在视图中通过调用queryset筛选Django ModelForm中的外键select:

form.template.queryset = ArticleTemplate.objects.filter(owner=request.user)

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

form.template.queryset = ArticleTemplate.objects.filter(owner=request.user)

\uuuuu init\uuuu
方法添加到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

\uuuuu init\uuuu
方法添加到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