首页 > 解决方案 > Django询问实例而不是价值

问题描述

我有一个带有这些模型的 django 应用程序(仅相关字段):

class Device(models.Model):
    serial = models.PositivewSmallIntegerField(unique=True, defeult=0000)
….

class Conexion(models.Model):
    serial = models.ForeignKey(Device, to_field='serial', null=True, blank=True, on_delete=models.DO_NOTHING)

……

当我尝试在 Conexión 中为 serial 分配一个整数值时,django 要求提供一个 Device 实例。但这是错误的,因为我设置了 to_field='serial'。我在另一个模型中有完全相同的外键,它工作正常。

这是一个例外:

ValueError: Cannot assign "11": "Conexión.serial" must be a "Device" instance

标签: django

解决方案


在 a 的情况下,Django 总是创建两个“孪生”字段field = ForeignKey(..)

  1. afield充当字段指向的对象Device的惰性 getter 和 setter(因此在这种情况下s,而不是它们的“唯一标识符”);和
  2. afield_id具有存储在外键字段中的值。

因此,您应该在此处分配给field_id,例如:

Conexion(serial_id=11)

推荐阅读