【问题标题】:Django foreign key from different app is NoneType来自不同应用程序的 Django 外键是 NoneType
【发布时间】:2018-02-04 15:12:32
【问题描述】:

我在 django 1.11.4 应用程序中有一个这样的模型,它引用了不同已安装应用程序中的外键(django_celery_results,在settings.INSTALLED_APPS 中列出):

class Worker(models.Model):
    tasks = models.ForeignKey('django_celery_results.TaskResult', null = True)

我可以运行makemigrations happy_farmmigrate 而不会出错,但是当我尝试访问worker.tasks 时,它是NoneType 而不是TaskResult 管理器:

$ from happy_farm.models import Worker
$ type(Worker.objects.first().tasks)
NoneType

通常我希望看到类似django.db.models.fields.related_descriptors.ManyRelatedManager 的内容。

我也尝试过导入 django_celery_results.models 并直接引用它,例如:

import django_celery_results

class Worker(models.Model):
    tasks = models.ForeignKey(django_celery_results.models.TaskResult, null = True)

同样的结果。

【问题讨论】:

  • 该实例是否设置了该字段?可能该字段正在工作,但您正在查找的实例将其设置为 null。
  • 无论有没有记录,经理都存在,所以如果它在工作,它永远不会是None。
  • 返回的相关字段是一个实例,而不是QuerySet。经理不是那里的返回对象。尝试在工作人员上设置任务并查询该工作人员的任务。

标签: python django django-models celery


【解决方案1】:

由于我的目标是让许多任务与一个工作人员相关联,因此答案是需要在一对多关系的多方设置 ForeignKey 关系(即在 TaskResult 模型上而不是在 Worker 上) .

【讨论】:

  • 这不是发布的问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 2011-03-10
  • 2012-03-26
  • 1970-01-01
  • 2015-12-30
相关资源
最近更新 更多