2013-10-02 31 views
0

Category模型这样相关的外键:如何获得向下仅在Django用户的下降的ModelForm

class Task(models.Model): 
    ''' 
     Task for the wedding plans 
    ''' 
    description = models.CharField(max_length=128) 
    owner = models.ForeignKey(User, default="bride") 
    category = models.ForeignKey(Category) 

class Category(models.Model): 

    user = models.ForeignKey(User) 
    name = models.CharField(max_length=128) 
    budget = models.DecimalField(default=0.0, decimal_places=2, max_digits=8, help_text="Amount in dollars ($)") 

    class Meta: 
     verbose_name_plural = "Categories" 

在我forms.py

class CategoryForm(ModelForm): 
    class Meta: 
     model = Category 
     exclude = ['user'] 

class TaskForm(ModelForm): 
    class Meta: 
     model = Task 
     exclude = ['owner'] 


# views 
form = TaskForm() 

当我打电话{{ form }}在模板,它显示所有用户创建的类别。但我想显示仅由登录用户创建的类别。怎么做?

回答

2

尝试以下操作:

form = TaskForm() 
form.fields['owner'].queryset = Task.objects.filter(owner=request.user) 

或修改TaskForm如下如果多次使用:

class TaskForm(ModelForm): 
    class Meta: 
     model = Task 
     exclude = ['owner'] 
    def __init__(self, user, *args, **kwargs): 
     super(TaskForm, self).__init__(*args, **kwargs) 
     self.fields['owner'].queryset = Task.objects.filter(owner=user) 

然后,通过request.user

form = TaskForm(request.user) 
+0

我下面你的第二个方法。但我得到'KeyError所有者'错误。 – pynovice

+0

@ user2032220,如果用'self.owner.queryset = Task.objects.filter(owner = user)替换self.fields ['owner']。queryset = Task.objects.filter(owner = user) '? – falsetru

+0

''TaskForm'对象没有属性'owner' – pynovice

相关问题