Joh*_*ohn 6 django django-models
我的模型设置如下(这是一个例子而不是我的实际模型)
class modelA(Model):
field1 = CharField(max_length=50)
class modelB(modelA):
field2 = CharField(max_length=50)
class anotherModel(Model):
connection = models.ForeignKey(modelA)
title = CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
我是否可以与存储在anotherModel中的modelB建立连接,因为modelB继承自模型A.
mod_b = modelB()
conn_b = anotherModel()
conn_b.connection = mod_b
Run Code Online (Sandbox Code Playgroud)
如果不是我怎么处理这个?
谢谢
来自 Django 内置ContentTypes模块的通用关系功能是处理多态外键的最受支持的方式。
您需要向模型添加一些支持字段,以便框架可以确定外键代表哪个特定类,但除此之外,它将相当透明地处理加载正确的类型。
在你的情况下,它会是这样的:
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
# modelA and modelB as before
class anotherModel(Model):
connection_content_type = models.ForeignKey(ContentType)
connection_object_id = models.PositiveIntegerField()
connection = generic.GenericForeignKey('connection_content_type',
'connection_object_id')
Run Code Online (Sandbox Code Playgroud)
请注意,您不需要自己设置/读取connection_content_type或connection_object_id字段......泛型框架会为您处理,它们只需要在那里让泛型工作。
mod_a = modelA()
mod_b = modelB()
conn = anotherModel()
conn.connection = mod_b
conn.save()
conn.connection = mod_a # change your mind
conn.save()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1408 次 |
| 最近记录: |