Python 无法在foreignkey上使用_set

Python 无法在foreignkey上使用_set,python,sql,django,Python,Sql,Django,我已经阅读了文档和stackoverflow,但是我不明白为什么我的外键跟踪不起作用,django只是说没有像vote\u story\u set.all()这样的属性 我有一个名为story的表和一个名为vote_story的表,story表有几个外键,比如一个foreign to vote_story,用于获取新闻故事的投票数 根据文档和这里的详细答案:我创建了这样一个对象: all_stories = Story.objects.all() votes = all_stories.vote

我已经阅读了文档和stackoverflow,但是我不明白为什么我的外键跟踪不起作用,django只是说没有像vote\u story\u set.all()这样的属性

我有一个名为story的表和一个名为vote_story的表,story表有几个外键,比如一个foreign to vote_story,用于获取新闻故事的投票数

根据文档和这里的详细答案:我创建了这样一个对象:

all_stories = Story.objects.all()
votes = all_stories.vote_story_set.all()
def list_all_stories(request):
    """ Show all stories """
    all_stories = Story.objects.all()
    return render(request, "base/story/all_stories.html", {'all_stories': all_stories})
但这不起作用,因为django说没有“投票故事集”这样的属性。story的数据库表具有“voces”属性作为表voces\u story的外键。从我看到的例子来看,这应该是有效的,所以我不明白为什么它不起作用。“投票”故事表中没有外键,只有一个主键和包含投票数的属性“投票”

更新: 下面显示了故事和投票故事以及相关视图的模型和模板

型号:

class Story(models.Model):
    story_id = models.IntegerField(primary_key=True)
    date_added = models.DateTimeField(auto_now_add=True)
    date_modified = models.DateTimeField(auto_now=True)
    title = models.CharField(max_length=150)
    description = models.CharField(blank=True, null=True, max_length=2000)
    story_text = models.TextField()
    picture = models.ImageField(blank=True, null=True, upload_to="story/images")
    storyAccessLevelID = models.ForeignKey(StoryAccessLevel)
    categoryID = models.ForeignKey(Category)
    votes = models.ForeignKey(Vote_story, blank=True, null=True)
    comments = models.ForeignKey(Comment, blank=True, null=True)

   def __unicode__(self):
        return self.title

class Vote_story(models.Model):
    votes = models.IntegerField()

    def __unicode__(self):
        return self.votes
在文件中,Vote_story是在story上面定义的,因此它可以找到它。 在Vote_story中,我让django自动创建主键,这与story不同。 目前有一票支持其中一个故事

模板代码(相关部分):


all_stories
是查询集,而不是实例
vote\u story\u set
是queryset中每个实例的属性,而不是queryset本身


另外,你似乎对关系的方向感到困惑。如果你的外键从Vote转到VoteStory,你不需要反向关系,你需要正向关系,这就是你所称的字段。不过,这也是每个实例的一个属性,而不是queryset。

啊,好的。我将queryset发送到模板,使用for循环对其进行迭代,并使用story.vote_story_set.all()但它仍然不起作用,现在我在queryset的实例上使用该属性。我得到的错误消息是“无法分析剩余部分:‘()’from’story.vote_story_set.all()’…外键从story表传递到vote_story表。如果我直接使用该字段,我只会得到一个字符串,上面写着“None”“在页面上,即使表格中有值,您仍然需要认真学习本教程。所有这些都在那里得到了充分的解释。除其他外,本教程还解释了不使用括号来调用模板中的方法,这是导致该错误的原因。但是你仍然没有读到我答案的第二部分:你在沿着关系向前走,而不是向后走,所以你不需要_set,你只需要FK字段的调用。这一点在教程中也有解释。嗯,好吧,我已经读过教程了,但这是很久以前的事了,因为我也读过很多其他的话题。。我一定会再看一眼。感谢您花时间回复。我再次阅读了有关_集的工作原理以及相关对象引用,我了解到,如果您需要引用定义外键的表,则在外键指向的另一个表中使用_集。。所以我会照你说的做,直接使用属性..但是当指定story.voces\u id时,我只会显示“None”,即使我有一个unicode方法..vote\u story表中有一个值,所以它不应该是一个问题,是吗?你可能应该发布你的模型和更新的模板。
def list_all_stories(request):
    """ Show all stories """
    all_stories = Story.objects.all()
    return render(request, "base/story/all_stories.html", {'all_stories': all_stories})