0

我试图通过 Django 中相当复杂的查找来访问特定字段。我想搜索一个 ManyToManyField 标签,它链接到一个 Poem 模型,而后者又由一个带有 OneToOneField 的 UserPoem 模型链接到。我只是不知道该怎么做:

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)`

因此,给定一个标签,我想获取涉及该标签中诗歌标题文本以及用户、诗歌日期等的信息。我尝试了各种涉及 select_related 的方法,但就是无法破解。这是(不工作的)标签请求:

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 表中返回任何信息。

4

1 回答 1

1

在你的地方,我会做:

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)

所以 :

def tag_page(request, tag_name):
    poems_sets = []
    tag = get_object_or_404(Tag, name=tag_name)
    poems = Poem.objects.filter(tags__name=tag).order_by('-id')             
    for p in poems:                
        usersp = UserPoem.objects.filter(poem=p)
        for u in usersp:
            poems_sets.append((p, u))
    return locals() 

模板 :

{% for poem,usersp in poems_sets %}
    {{poem.title}}
    {{poem.thetext}}
    {% for u in usersp %}
        {{u.date}}
        {{u.user}}
    {% endfor %}
{% endfor %}               
于 2013-10-22T11:25:37.413 回答