DRF. Пытаюсь создать запись, которая требует экземпляр другого объекта DB, и продолжаю получать "аргумент int() должен быть строкой...".

Я новичок в Django и DRF, и я действительно борюсь с кое-чем.

Я пытаюсь создать запись в таблице, которая имеет внешний ключ. Допустим, модели выглядят следующим образом:

class Foo(models.Model):
  foo_id = models.IntegerField(
    primary_key=True,
  )
  name = models.CharField(
    max_length=256,
  )

class Bar(models.Model):
  bar_id = models.CharField(
    primary_key=True,
    max_length=256
  )
  name = models.CharField(
    max_length=256,
  )
  foo = models.ForeignKey(
    Foo,
    models.SET_NULL,
    related_name='rel',
  )

Когда я пробую это:

Bar.objects.create(
  bar_id = "A1",
  name = "John",
  foo = 5
)

Я получаю ошибку, которую я ожидал:

Cannot assign "5": "Bar.foo" must be a "Foo" instance.

Но если я попробую:

Bar.objects.create(
  bar_id = "A1",
  name = "John",
  foo = Foo.objects.get(foo_id=7)
)

Я получаю:

int() argument must be a string, a bytes-like object or a number, not 'Foo'

Я действительно не понимаю, поскольку уверен, что создавал подобные записи в других местах.

Попробуйте это:

Bar.objects.create(
  bar_id = "A1",
  name = "John",
  foo_id = 7
)

или так:

bar = Bar(bar_id="A1", name="John")
bar.foo_id = 7
bar.save()

во-первых, вы должны null=True при использовании SET_NUll

   foo = models.ForeignKey(
    Foo,
    models.SET_NULL,
    null=True,
    related_name='rel',   )

Вы можете использовать следующие подходы

Bar.objects.create(
      bar_id = "A1",
      name = "John",
      foo_id = 5
    )

и ваш второй подход правильный

Bar.objects.create(
  bar_id = "A1",
  name = "John",
  foo = Foo.objects.get(foo_id=7)
)
Вернуться на верх