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)
)