2013-04-24 3 views
1

У меня есть две модели:Как показать только некоторые данные в select?

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.

Как показывать только данные, присвоенные зарегистрированному пользователю?

ответ

1

Вы можете выбирать внешний ключ выбора в Django ModelForm по QuerySet вызова на ваш взгляд:

form.template.queryset = ArticleTemplate.objects.filter(owner=request.user) 
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 
Смежные вопросы