我的model.py中有一个类Streams
,它应该有另一个类类型的通用外键(Commentdata
或ResponseData
)
当我得到Streams行时,我想访问具有相同id的另一个类中的数据。例如,当我创建一个Stream db条目时,它还将创建一个具有相同ID的CommentData db条目,该行将具有CommentData
的genericforeignkey。当我想访问注释数据时,我将检查该流的相关类,然后查询其中id = Stream.id的行的内容类型
这是我的Streams课程:
limit = models.Q(app_label='picture', model='commentdata') | models.Q(app_label='picture', model='responsedata')`
content_type = models.ForeignKey(ContentType, verbose_name='Data Type', limit_choices_to=limit, null=True, blank=True)
object_id = models.PositiveIntegerField(verbose_name='Related Object', null=True, blank=True)
content_object = GenericForeignKey('content_type', 'object_id')
在django admin中,我可以将Streams
内容类型保存到(Commentdata
或ResponseData
),这很好。
如果我按照
的方式做某事x = Streams.objects.all()
y = x[0].content_type
我可以输出与之相关的类流。我不能像y.objects.all()
那样做一些事情来获取相关的类,因为我得到了错误
无法通过ContentType实例访问管理器
是否有使用ContentType Manager查找此信息? ContentType.objects.get_for_model(x[0])
返回班级Stream
。同样,ContentType.objects.get_for_model(y)
会返回内容类型。
谢谢
答案 0 :(得分:1)
行。我明白你在做什么。首先,没有办法使用content_types API执行您尝试执行的操作。但它可以做到。
正如你所说:
x = Streams.objects.all() # all stream objects
y = x[0].content_type # CommentData ContentType object
所以你需要像这样使用基本的Django ORM:
from django.db.models.loading import get_model
x = Streams.objects.all() # all stream objects
y = x[0].content_type # CommentData ContentType object
model_class = get_model(app_label=y.app_label, model_name=y.model)
model_class.objects.all() # all objects of the type