Python Django从ManyToManyField反向查找OneToOneField
我试图通过Django中相当复杂的查找来访问特定字段。我想搜索一个ManyToManyField标记,它链接到一个Poem模型,而这个模型又被一个带有OneToOneField的UserPoem模型链接到。我就是不知道怎么做:Python Django从ManyToManyField反向查找OneToOneField,python,database,django,Python,Database,Django,我试图通过Django中相当复杂的查找来访问特定字段。我想搜索一个ManyToManyField标记,它链接到一个Poem模型,而这个模型又被一个带有OneToOneField的UserPoem模型链接到。我就是不知道怎么做: class Poem(models.Model): title = models.CharField(max_length=256) thetext = models.TextField() class UserPoem(models.Model):
class Poem(models.Model):
title = models.CharField(max_length=256)
thetext = models.TextField()
class UserPoem(models.Model):
poem = models.OneToOneField(Poem, related_name='u_poem')
date = models.DateField()
user = models.ForeignKey(User)
class Tag(models.Model):
name = models.CharField(max_length=64, unique=True)
poems = models.ManyToManyField(Poem)`
因此,给定一个标签,我想获取该标签中诗歌标题文本的信息,以及用户、诗歌日期等信息。我尝试了各种方法,包括选择相关的,但就是无法破解它。以下是(不工作)标签请求:
def tag_page(request, tag_name):
tag = get_object_or_404(Tag, name=tag_name)
poems = tag.poems.order_by('-id').select_related('u_poem')
我只是对Django的人际关系的运作方式感到困惑。自从我决定将Poems表格模型一分为二以来,我每天都会遇到数不清的问题
这不会返回错误;它似乎没有从UserPoem/u_poem表返回任何信息。在您的位置,我会:
class Tag(models.Model):
name = models.CharField(max_length=64, unique=True)
class Poem(models.Model):
title = models.CharField(max_length=256)
thetext = models.TextField()
tags = models.ManyToManyField(Poem)
因此:
模板:
{% for poem,usersp in poems_sets %}
{{poem.title}}
{{poem.thetext}}
{% for u in usersp %}
{{u.date}}
{{u.user}}
{% endfor %}
{% endfor %}
你好我知道你来自哪里,但这并不能真正解决我的问题。它不仅打乱了我的应用程序的其他部分(当我使用_set时),而且我仍然看不到如何使用该更改访问userpoems表。在其他地方,我使用了
poem.tag_set
和类似的查询。另外,for循环是实现这一点的唯一方法吗?我想我是在想更“优雅的解决方案”,也许这就是为什么我在这个问题上如此挣扎的原因。非常感谢。嗨,astro-我已经将你的代码添加到我的应用程序中,网页上什么也没有显示。U集数组为空。是否确实存在此类数据?poems和usersp不是空的吗?你没有一个对象userpeom你有几个变量,所以:{%forpoem,date,user_id,id inpoems_set%}{{{poem.title}{{{poem.thetext}{{date}{{user_id}{%endfor%}{%endfor%}{%endfor%}
{% for poem,usersp in poems_sets %}
{{poem.title}}
{{poem.thetext}}
{% for u in usersp %}
{{u.date}}
{{u.user}}
{% endfor %}
{% endfor %}