ValueError: Cannot assign "[<Location: somename>]": "Event.location" must be a "Location" instance.
Когда говорится, что [<Location: somename>]
пройдено, скобки означают, что это список.
Проблема в том, что переменная l
может иметь разные типы в вашем коде.
Вот это QuerySet (совместимый со списком тип) Location:
l=Location.objects.filter(name=location)
Вот это место:
l = Location(name=location)
Вы должны убедиться, что l
содержит местоположение в обоих случаях, например, с этим блоком else:
l=Location.objects.filter(name=location)
if not l:
l = Location(name=location)
l.save()
else:
l = l[0]
Поскольку вы пытаетесь получить один экземпляр местоположения, вы также можете использовать get()
вместо filter()
:
try:
l = Location.objects.get(name=location)
except Location.DoesNotExist:
l = Location(name=location)
l.save()
Вот в основном метод get_or_create()
:
l, created = Location.objects.get_or_create(name=location)
Типичная ошибка, на которую следует обратить внимание при использовании get_or_create (), это то, что он возвращает 2 значения. Первый - модель, второй - логическое значение, которое соответствует True, если объект был создан, и False, если он был найден.
Документация для get_or_create: https://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create