У меня есть следующие Django модели для города и штата, настроенные следующим образом:
class State(models.Model):
name = models.CharField(max_length=55)
abbreviation = models.CharField(max_length=2)
class City(models.Model):
name = models.CharField(max_length=55)
state = models.ForeignKey( State, on_delete=models.CASCADE, null=True, blank=True )
Я импортирую json данные компании, которые включают NAME, CITY и STATE. Это выглядит так:
{'NAME': 'Company Name', 'ADDRESS': '123 Main St.', 'CITY': 'Bethel', 'STATE': 'Connecticut'}
Я пытаюсь настроить собственный метод сохранения для объекта моей компании, который бы получал или создавал необходимый объект City при создании или обновлении компании. Создание объекта City, в свою очередь, потребует получения или создания объекта State.
class Company(models.Model):
name = models.CharField(max_length=55)
address1 = models.CharField(max_length=200, blank=True)
address2 = models.CharField(max_length=200, blank=True)
city = models.ForeignKey( City, on_delete=models.CASCADE, null=True, blank=True )
zipcode = models.CharField(max_length=20, blank=True)
def save(self, *args, **kwargs):
self.city, created = City.objects.get_or_create(name=city)
super(Company, self).save(*args, **kwargs)
Поскольку поле состояния в City не является обязательным, я начинаю с простой попытки создания города ,
В моем коде я создаю новый экземпляр Company следующим образом:
company, created = Company.objects.update_or_create(
name=p['NAME],
defaults = {
'address1': p.get('ADDRESS1', None),
'address2': p.get('ADDRESS2', None),
'city': p.get('CITY', None),
'zipcode': p.get('ZIP', None),
}
Но Django возвращает эту ошибку:
Cannot assign "'Bethel'": "Company.city" must be a "City" instance.