ModelForm заполняет поле внешнего ключа как число

У меня есть модель, из которой я создал ModelForm:

models.py:

class City(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return f'{self.name}'

class Profile(models.Profile):
    name = models.CharField(max_length=50)
    user = models.OneToOneField(User, on_delete=models.CASCADE, unique=False)
    location = models.ForeignKey('City', on_delete=models.SET_NULL, blank=True, null=True)

forms.py

from django import forms

from .models import Profile, City

class LocationField(forms.CharField):
    def clean(self, value):
        try:
            city = City.objects.get(name=value)
        except ObjectDoesNotExist:
            city = City.objects.create(name=value)
        return city


class ProfileForm(forms.ModelForm):
    location = LocationField()

    class Meta:
        model = Profile
        exclude = ['user']

views.py

def profile_update_view(request):
    template_name = 'profiles/update.html'
    user = request.user
    profile = Profile.objects.get(user__id=user.id)
    if request.method == 'GET':
        form = ProfileForm(instance=profile)
    else:
        form = ProfileForm(request.POST, instance=profile)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = user
            obj.save()
            return redirect('profile_view')
    context = {'form': form}
    return render(request, template_name, context=context)

Когда я сохраняю форму, меня устраивает, как она работает, но когда я загружаю форму снова для обновления, она заполняет LocationField() как целое число City pk, но я хочу, чтобы вместо этого она загружала имя. Есть ли способ сделать это?

Я добавил в views.py:

if request.method == 'GET':
    initial = {}
    if profile.location:
        initial = {'location': profile.location.name}
        form = ProfileForm(instance=profile, initial=initial)

Теперь это работает. Но это какой-то обходной путь. Я думал, что есть какой-то параметр, возможно

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