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

Вернуться на верх