Как отобразить строку 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__
формы, но пока безрезультатно. Спасибо!