Django: Использование Faker для заполнения нескольких таблиц
Я пытаюсь заполнить свой проект Django некоторыми тестовыми данными. У меня есть 3 таблицы, Person, Address, Employment. И Address, и Employment имеют Person FK. Мой скрипт создает персону, но когда он доходит до адреса, происходит сбой в Address.person
модели
class Person(models.Model):
first_name = models.CharField(max_length=200)
middle_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
class Address(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
address = models.CharField(max_length=200, blank=True, null=True)
class Employment(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
employer = models.CharField(max_length=200)
Мой скрипт
def populate(n=5):
for entry in range(n):
person = Person.objects.get_or_create(
first_name = fakegen.first_name(),
middle_name = fakegen.first_name(),
last_name = fakegen.last_name(),
FakeAddress(person)
FakeEmployment(person)
def FakeAddress(person):
address = Address.objects.get_or_create(
person = person,
address = fakegen.street_address(),
TypeError: Field 'id' expected a number but got <Person: Michael Baker>.
Я попытался передать Person в функцию адреса и получил TypeError: Field 'id' expected a number but got <Person: Michael Baker>. Далее я попытался передать ID Person вместо person и получил ValueError: Cannot assign "93": "Address.person" must be a "Person" instance.
get_or_create возвращает кортеж. Поскольку мне нужен только первый элемент в кортеже, я изменил
person = Person.objects.get_or_create(
first_name = fakegen.first_name(),
middle_name = fakegen.first_name(),
last_name = fakegen.last_name(),
to
person, _created = Person.objects.get_or_create(
first_name=fakegen.first_name(),
middle_name=fakegen.first_name(),
last_name=fakegen.last_name(),