django - 在 Django 中使用 id 进行多对多反向字段查找 | 多态模型
问题描述
我试图弄清楚如何生成正确的查询集来检索
url 和 value 字段(Attr_1 和 Attr_2 模型)
从查询Object1模型“反向集”多对多关系。这是我的例子:
模型.py:
class Text(models.Model):
string = models.TextField()
#Entity
class Element(models.Model):
pageline = models.IntegerField()
class Object1(Element):
text = models.ManyToManyField(Text)
class Object2(Element):
another_var = models.ManyToManyField(Text)
yet_another = models.CharField(max_length=1)
#Entity
class Attribute(models.Model):
belongsTo = models.ManyToManyField(Element)
class Attr_1(Attribute):
url = models.URLField()
class Attr_2(Attribute):
value = models.CharField(max_length=255)
date = models.URLField()
如果我使用:
>> models.Object1.objects.get(pk=1).attribute_set.all()
<QuerySet [<Attribute: Attribute object (1)>, <Attribute: Attribute object (2)>]>
>> models.Object1.objects.get(pk=1).attribute_set.values()
<QuerySet [{'id': 1}, {'id': 2}]>
我想现在我必须查询 Attr_1 的 pk=1 和 Attr_2 的 pk=2?
属性模型是否有关系知道 id=1 是在 Attr_1 还是 Attr_2 模型中?
任何帮助表示赞赏。谢谢!
编辑:
我想知道是否可以通过使用内容类型来实现解决方案: Django 为许多表建模一个外键,我必须阅读并理解该技术。
在我看来,django-polymorphic适合我的需要。即使我不喜欢使用非内置库,并且很想通过内置模块了解解决方案。我没有手动构建有效查询集的知识。也许我的模型是错误的?
但是使用多态模型我可以查询:
>> models.Object1.objects.get(pk=1).attribute_set.all()[0].url
'http://www.dot.com'
我只需要捕获不会遇到的对象类型:
AttributeError: 'Attribute' object has no attribute 'url'
希望有人可以帮助或进一步解释该主题,即使我找到了适合我的东西。
解决方案
推荐阅读
- c# - 使用 TFS REST API 导入 GlobalList 时发生错误 TF51635
- javascript - VueJS:属性或方法......未在实例上定义,但在渲染期间引用
- c++ - 如何将 QPrinter 绘图保存为 QPixmap 并将其设置为窗口图标上的 QIcon?
- apache-spark - Spark中来自关系数据模型的树/嵌套结构
- python - 查找字符串中的最后一个子字符串?
- html - 如何调整 inline-block 布局中元素之间的间距?
- r - How to select strings in a nested list from a list of indexes
- flutter - 如何将图像部分显示为颤动以获得拉幕效果?
- anaconda - 使用 python-pptx 的 ImportError
- ruby - 如何在 ruby on rails 上使用我的小课堂