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(),
Вернуться на верх