Здравствуйте.Есть вопрос.Теоретически хотел сделать вот так - смысл был в объединении в одну отдельную функцию проверки нахождения пользователя в группах, имена которых совпадают с кодами отделов, соответственно, доступных для выбора:views.py:
def check_stables():
from fleet.models import Stable
stbls = Stable.objects.all()
r_u = request.user.groups
stables = stbls
for st in stables:
if not r_u.filter(name=st.code).exists():
stables = stables.exclude(id=st.id)
return stables
def vehicle(request, action='add', v_id = 'a999'):
from django.forms.widgets import HiddenInput
if action == 'add' and (lambda u: u.has_perm('fleet.add_vehicle')):
from fleet.forms import Add_V_Form
f = Add_V_Form(request.POST or None)
if request.method == 'POST' and f.is_valid():
obj = f.save(commit=False)
obj.owner = request.user
obj.save()
f.save()
return render_to_response('html/u_thanks.html', {'message':message}, context_instance=RequestContext(request))
return HttpResponseRedirect('/fleet/')
else:
return render_to_response('fleet/html/add_v.html', {'f': f }, context_instance=RequestContext(request))
forms.py:
class Add_V_Form(forms.ModelForm):
from fleet.views import check_stables
s_code = forms.ModelChoiceField(queryset=check_stables(), label = 'Stable')
class Meta:
model = Vehicle
exclude = ('owner')
Не выходит аленький цветок. Для request.user нужно дать request. Но если в forms.py вписать при вызове функции check_stables(request), дает ошибку, что имени тоже такого нет.Вопрос, где ошибка? Нужно как-то передать в форму контекст? Если в процедуре заменить request.user на, например,
from django.contrib.auth.models import User
r_u = User.objects.get(id=1).groups.all()
то request нигде не требуется, все работает.Но откуда взять этот id?