2012-11-07 2 views
-1

select 필드가 현재 로그인 한 사용자로 필터링 된 양식 (ModelForm)을 표시하려고합니다. 이 경우 선택 필드에는 범주 목록이 포함됩니다. 현재 로그인 한 사용자에게 "속한"범주 만 표시하려고합니다. 카테고리 필드는 IngredienceCategory 모델의 외래 키입니다.ModelForm의 필터 선택 필드가 현재 로그인 한 사용자로

여기까지 왔지만 오류가 발생했습니다 (예상치 못한 키워드 쿼리 세트). 내가 뭘 잘못하고 있는거야?

# models.py 
class IngredienceCategory(models.Model): 
    name = models.CharField(max_length=30) 
    user = models.ForeignKey(User, null=True, blank=True) 

    class Meta: 
    verbose_name_plural = "Ingredience Categories" 

    def __unicode__(self): 
     return self.name 


class Ingredience(models.Model): 
    name = models.CharField(max_length=30) 
    user = models.ForeignKey(User, null=True, blank=True) 
    category = models.ForeignKey(IngredienceCategory, null=True, blank=True) 

    class Meta: 
     verbose_name_plural = "Ingredients" 

    def __unicode__(self): 
     return self.name 


class IngredienceForm(ModelForm): 
    class Meta: 
     model = Ingredience 
     fields = ('name', 'category') 


# views.py 
def home(request): 
    if request.user.is_authenticated(): 
     username = request.user.username 
     email = request.user.email 
     foods = Food.objects.filter(user=request.user).order_by('name') 
     ingredients = Ingredience.objects.filter(user=request.user).order_by('name') 
     ingrcat = IngredienceCategory.objects.filter(user=request.user) 

     if request.method == 'POST': 
      form = IngredienceForm(request.POST) 
      if form.is_valid(): 
       # Create an instance of Ingredience without saving to the database 
       ingredience = form.save(commit=False) 
       ingredience.user = request.user 
       ingredience.save() 
     else: 
      # How to display form with 'category' select list filtered by current user? 
      form = IngredienceForm(queryset=IngredienceCategory.objects.filter(user=request.user)) 

     context = {} 
     for i in ingredients: 
      context[i.category.name.lower()] = context.get(i.category.name.lower(), []) + [i] 

     context2 = {'username': username, 'email': email, 'foods': foods, 'ingrcat': ingrcat, 'form': form,} 
     context = dict(context.items() + context2.items()) 
    else: 
     context = {} 

    return render_to_response('home.html', context, context_instance=RequestContext(request)) 

답변

1

ModelForm이 queryset 키워드를 사용하지 않기 때문에 이러한 현상이 발생합니다.

당신은 아마보기에 검색어 세트를 설정하여이를 달성 할 수

form = IngredienceForm() 
form.fields["category"].queryset = 
     IngredienceCategory.objects.filter(user=request.user) 

관련 질문 here를 참조하십시오.

+0

첫 번째 솔루션은 작동하지만 두 번째 솔루션은 사용자를 기준으로 필터링하지 않습니다. 전체 집합을 반환합니다. 또한 같은 질문에 두 번 연결했습니다. – finspin

+0

문제가 해결되었습니다. 감사합니다. – dieb

관련 문제