Я пытаюсь ограничить выпадающий список (показывает только поля относящиеся к конкретному user), я сделал это так:
forms.py:
class BookmarksForm(forms.ModelForm):
def __init__(self, user, *args, **kwargs):
super(BookmarksForm, self).__init__(*args, **kwargs)
self.fields['folder'].queryset = Folders.objects.filter(user=user)
class Meta:
model = Bookmarks
fields = ('link', 'folder')
views.py:
def bookmarks(request):
if request.method == 'POST' and 'create_folder' in request.POST: # форма создания папки
form = FolderForm(request.POST)
f = form.save(commit=False)
user = User.objects.get(id=request.user.id)
f.user = user
if form.is_valid():
print('here')
f.save()
return redirect('bookmarks')
else:
form.add_error(None, 'Ошибка добавления папки')
elif request.method == 'POST' and 'create_bm' in request.POST: # форма создания закладки
form = BookmarksForm(request.POST)
f = form.save(commit=False)
try:
title = get_name_site(f.link)
f.name = title
except:
f.name = f.link
if form.is_valid():
f.save()
return redirect('bookmarks')
else:
form.add_error(None, 'Ошибка добавления закладки')
else:
folder_form = FolderForm()
bookmarks_form = BookmarksForm(user=request.user.id)
folder = Folders.objects.filter(user=request.user.id)
fastlink = Fastlinks.objects.filter(user=request.user.id)
return render(request, 'mainapp/bookmarks.html', {'title': 'закладки', 'folder_form': folder_form, 'bm_form': bookmarks_form, 'folders': folder, 'fl': fastlink})
Сейчас список отображается корректно, но при отправке формы выдает ошибку:
Field 'id' expected a number but got .
Если я пытаюсь передать user:
form = BookmarksForm(request.POST, user=request.user.id)
выпадает ошибка:
__init__() got multiple values for argument 'user'