我的模型中定义了以下内容:
class TaskLink(models.Model):
task = model.ForeignKey(Task)
link_choices = (
models.Q(app_label="accounts", model="location"),
# Other models are also linked to here.
)
linked_content_type = \
models.ForeignKey(
ContentType,
limit_choices_to=link_choices
)
linked_object_id = models.PositiveIntegerField()
linked_object = \
generic.GenericForeignKey(
'linked_object_content_type',
'linked_object_id'
)
该模型将Task
对象与link_choices
元组中的任何模型链接起来。在这种情况下,accounts.Location
模型在此列表中。
Location
当删除对象导致相关对象的级联删除时,我的问题就出现了TaskLink
。删除失败并显示以下错误消息:
django.core.exceptions.FieldError: Cannot resolve keyword 'object_id' into field. Choices are: id, linked_object, linked_object_content_type, linked_object_content_type_id, linked_object_id, task, task_id
视图是一个django.views.generic.DeleteView
只有pk_url_kwarg
参数和模型集的实例(以及添加到调度方法的权限装饰器);TaskLink
在我将模型添加到组合之前,它工作了linked_object_fine 。
我错过了什么?
编辑:看来这可能是 Django 中的一个错误;当通过通用外键级联删除对象时,Django 会忽略您传递给该字段的构造函数的字段名称字符串,GenericForeignKey
而是查找content_type
andobject_id
字段,在我的情况下,该字段不存在。这有效地将模型可能必须的通用外键数量限制为 1,除非您不会遇到级联删除。
我已经通过 Django 邮件列表发送了这个问题,因为这种行为可能是故意的。