Как получить id внешнего ключа в django modelform
Я хочу отобразить внешний ключ поля user в выпадающем списке выбора в форме и получить id выбранного имени пользователя. В настоящее время при сохранении формы в приведенном ниже коде в поле user_id сохраняется значение 'None'. Есть решение?
Все шло успешно, пока он не появился в выпадающем формате, а имя пользователя текущей учетной записи было установлено по умолчанию, и был добавлен атрибут disabled, чтобы его нельзя было редактировать.
[models.py]
class Leave(models.Model):
title = models.CharField(max_length=50, blank=True, null=True)
from_date = models.DateField(blank=True, null=True)
end_date = models.DateField(blank=True, null=True)
memo = models.TextField(blank=True, null=True)
user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True)
is_deleted = models.BooleanField(default=False)
create_date = models.DateTimeField(auto_now_add=True)
update_date = models.DateTimeField(auto_now=True)
[forms.py]
class LeaveForm(ModelForm):
class Meta:
model = Leave
# datetime-local is a HTML5 input type, format to make date time show on fields
widgets = {'user': Select(attrs={"disabled": 'disabled'})}
fields = ['title', 'from_date', 'end_date', 'memo', 'user']
def __init__(self, request, *args, **kwargs):
super(LeaveForm, self).__init__(*args, **kwargs)
# input_formats to parse HTML5 datetime-local input to datetime field
self.fields['from_date'].input_formats = ('%Y-%m-%d',)
self.fields['end_date'].input_formats = ('%Y-%m-%d',)
self.fields['user'].empty_label = request.user.username
[views.py]
def leave(request, leave_id=None):
instance = Leave()
if leave_id:
instance = get_object_or_404(Leave, pk=leave_id)
else:
instance = Leave()
form = LeaveForm(request, request.POST or None, instance=instance)
if request.POST and form.is_valid():
form.save()
return HttpResponseRedirect(reverse('leave:calendar'))
return render(request, 'pages/leave/leave_add.html', {'form': form})