Как отобразить строку ForeignKey вместо pk в форме обновления с помощью поля CharField
Как заставить форму Update отображать str внешний ключ, а не pk при использовании CharField?
Мои модели
class MyUser(AbstractUser):
username=models.CharField(max_length=256,unique=True)
def __str__(self):
return self.username
class Device(models.Model):
name=models.CharField(max_length=256,unique=True)
owner=models.ForeignKey(MyUser,on_delete=models.CASCADE)
def __str__(self):
return self.name
Моя форма
"""
User puts in a registered username to the owner field
and clean_owner gets and saves the user object to owner field.
"""
class DeviceForm(forms.ModelForm):
owner=forms.CharField()
class Meta:
model=Device
fields=['owner','name']
def clean_owner(self):
owner=self.cleaned_data['owner']
try:
user_object=MyUser.objects.get(username=owner)
except MyUser.DoesNotExist as e:
raise forms.ValidationError('User does not exist')
return user_object
Приведенная выше форма работает как положено при создании объекта. Однако при обновлении форма отображает поле owner в качестве MyUser объекта pk, вместо того, что указано в методе __str__ модели. Есть ли способ заставить форму обновления отображать owner.username в поле owner вместо owner.pk? Я пробовал несколько решений по переопределению метода __init__ формы, но пока безрезультатно. Спасибо!