您的位置:

exceptions.FieldError("'%s.%s' refers to field '%s' which is not local to model ""'%s'."% (self.model._meta.label,self.name,to_field.name,self.remote_field.model._meta.concrete_model._meta.label,))的处理方案

  发布时间:2023-04-05 15:17:30
使用例子是的,下面是一个例子:假设我们有一个 `Department` 模型和一个 `Employee` 模型,`Employee` 模型中定义了一个名为 `department` 的外键,连接到 `Department` 模型中的 `id` 字段这样定义外键就是正确的。因为在 `Employee` 模型中,`department`字段引用了`Department` 模型中的 `id` 字段,而`id`字段是`Department`模型的主键,也是本地字段,所以不会出现上面的错误。还可以用related_name来反推,例如,在Department的实例中可以通过employees来获取所有的员工,而在Employee中可以通过department来获取员工所属的部门。

报错的原因

exceptions.FieldError("'%s.%s' refers to field '%s' which is not local to model ""'%s'."% (self.model._meta.label,self.name,to_field.name,self.remote_field.model._meta.concrete_model._meta.label,)) 这个错误在 Django 中出现的原因是在使用外键时,指定的字段不是当前模型的本地字段。具体来说,当前模型的字段引用了另一个模型中的字段,但是不是当前模型的本地字段。

如何解决

解决方法是在定义外键时使用正确的字段名称。在使用外键时,应该指定当前模型中的本地字段而不是另一个模型中的字段。

例如,如果有一个 `Author` 模型和一个 `Book` 模型,并且在 `Book` 模型中定义了一个名为 `author` 的外键,则应该在 `Book` 模型中使用 `Author` 模型中的主键字段作为外键


class Book(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    ...

还要注意的是,在models中确保双向关系中,主表中的外键指向的是从表的主键。


class Author(models.Model):
    name = models.CharField(max_length=100)
    books = models.ManyToManyField(Book, related_name='authors')
    ...

这样就可以解决这个问题了。

使用例子

是的,下面是一个例子:

假设我们有一个 `Department` 模型和一个 `Employee` 模型,`Employee` 模型中定义了一个名为 `department` 的外键,连接到 `Department` 模型中的 `id` 字段。


class Department(models.Model):
    name = models.CharField(max_length=100)

class Employee(models.Model):
    name = models.CharField(max_length=100)
    department = models.ForeignKey(Department, on_delete=models.CASCADE, related_name='employees')

这样定义外键就是正确的。因为在 `Employee` 模型中,`department`字段引用了`Department` 模型中的 `id` 字段,而`id`字段是`Department`模型的主键,也是本地字段,所以不会出现上面的错误。

还可以用related_name来反推,例如,在Department的实例中可以通过employees来获取所有的员工,而在Employee中可以通过department来获取员工所属的部门。