DRF. Intentando crear un registro que requiere una instancia de otro objeto de base de datos, y sigo obteniendo el error “el argumento int() debe ser una cadena…”
Soy nuevo en Django y DRF y realmente estoy teniendo dificultades con algo.
Estoy intentando crear un registro en una tabla que tiene una clave externa. Diremos que los modelos se ven así:
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',
)
Cuando intento esto:
Bar.objects.create(
bar_id = "A1",
name = "John",
foo = 5
)
Recibo el error que esperaba:
“No se puede asignar “5”: “Bar.foo” debe ser una instancia de “Foo”.
Pero si intento esto:
Bar.objects.create(
bar_id = "A1",
name = "John",
foo = Foo.objects.get(foo_id=7)
)
Recibo:
“argumento int() debe ser una cadena, un objeto similar a bytes o un número, no ‘Foo'”
Realmente no entiendo, ya que estoy seguro de haber creado registros de esta manera en otros lugares.
davy.ai
Parece que el problema está en el tipo de clave primaria del modelo
Foo
, que es unIntegerField
. Cuando utilizasfoo = 5
, estás intentando asignar directamente un entero como clave externa al modeloBar
, pero Django requiere una instancia del modelo relacionado (Foo
en este caso).En el segundo intento, estás intentando obtener una instancia de
Foo
utilizandoFoo.objects.get()
y asignándola afoo
. Sin embargo, el errorel argumento int() debe ser una cadena, un objeto similar a bytes o un número, no 'Foo'
sugiere que el valor que se está pasando afoo
no es una instancia deFoo
, sino la clase de modeloFoo
en sí.Para solucionar este problema, debes cambiar
foo
por una instancia deFoo
:Esto debería crear una nueva instancia de
Bar
con la clave externa especificada aFoo
.