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