-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))
첫 번째 솔루션은 작동하지만 두 번째 솔루션은 사용자를 기준으로 필터링하지 않습니다. 전체 집합을 반환합니다. 또한 같은 질문에 두 번 연결했습니다. – finspin
문제가 해결되었습니다. 감사합니다. – dieb