Как в формах Django отобразить реальный элемент, а не его ID?
У меня есть форма, в которой отображаются данные. У меня есть поле, которое доступно только для чтения [book_id], но отображается именно ID. Как бы мне сделать так, чтобы отображался реальный артикул?
class IssueForm(forms.ModelForm):
def __init__(self,*args, pk,school,issuer, **kwargs):
super(NewIssueForm, self).__init__(*args, **kwargs)
klasses = [1,2,3,4]
if Books.objects.filter(school=school,id=pk,subject__name = "revision"):
self.fields['due_days'].widget.attrs['hidden'] = False
else:
self.fields['due_days'].widget.attrs['hidden'] = True
self.fields['issuer'].initial = issuer
self.fields['borrower_id'].queryset = Student.objects.filter(school=school,klass__name__in = klasses)
self.fields['borrower_id'].label = "Select Student."
self.fields['book_id'].label = "Selected Book."
self.fields['book_id'].widget.attrs["readonly"] = True
self.initial['book_id'] = Books.objects.get(school=school,id=pk)
class Meta:
model = Issue
fields = ['issuer','book_id','borrower_id','due_days']
widgets = {
'book_id':forms.TextInput(attrs={"class":'form-control','type':''}),
'issuer':forms.TextInput(attrs={"class":'form-control','type':'hidden'}),
'borrower_id': Select2Widget(attrs={'data-placeholder': 'Select Student','style':'width:100%','class':'form-control'}),
'due_days':forms.TextInput(attrs={"class":"form-control"}),
}
Я думал, что Books.objects.get(school=school,id=pk)
должен был дать мне то, что я просил.
Это вид
def new_issue_book(request,pk):
if request.method == 'POST':
form = IssueForm(request.POST,school= request.user.school,pk=pk,issuer = request.user)
if form.is_valid():
try:
name = form.cleaned_data['borrower_id'].id
form.save(commit=True)
books = Books.objects.filter(school = request.user.school).get(id=pk)#Get a book names as selected in the dropdown
Books.Claimbook(books)
messages.success(request,f'Successful')
return redirect('view_books')
except Exception as e:
messages.warning(request,f"{e}")
return redirect('view_books')
else:
form = IssueForm(school= request.user.school,pk=pk,issuer = request.user)
return render(request, 'libman/new_issue_book.html', {'form': form})