Django反向查找外键

FLX*_*FLX 60 python django django-forms django-views

我有一个场地,这个场地有许多活动在那里发生.我的模型看起来像这样:

class Event(models.Model):
    title = models.CharField(max_length=200)
    date_published = models.DateTimeField('published date',default=datetime.now, blank=True)
    date_start = models.DateTimeField('start date')
    date_end = models.DateTimeField('end date')
    def __unicode__(self):
        return self.title
    description = models.TextField()
    price = models.IntegerField(null=True, blank=True)
    venue = models.ForeignKey(Venue)

class Venue(models.Model):
    title = models.CharField(max_length=200)
    date_published = models.DateTimeField('published date',default=datetime.now, blank=True)
    venue_latitude = models.CharField(max_length=200)
    venue_longitude = models.CharField(max_length=200)
    venue_address = models.CharField(max_length=200)
    venue_city = models.CharField(max_length=200)
    venue_state = models.CharField(max_length=200)
    venue_country = models.CharField(max_length=200)
    description = models.TextField()
    def __unicode__(self):
        return u'%s' % (self.title)
Run Code Online (Sandbox Code Playgroud)

我想展示某个地点发生的所有事件.我怎样才能做到这一点?我目前的观点如下:

def detail(request, venue_id):
    venue = get_object_or_404(Venue, pk=venue_id)
    return render(request, 'venue-detail.html', {'venue': venue})
Run Code Online (Sandbox Code Playgroud)

Ric*_*Ric 92

你可以用events = venue.event_set另一种方式

请参阅Django文档

  • 通常是@ mp3por venue.event_set.all()或venue.event_set.filter(). (6认同)
  • 如果有人仍然看到错误 `AttributeError: 'Foo' object has no attribute 'bar_set'`,您可能需要检查子模型的 `ForeignKey`/`OneToOneField`/`ManyToManyField` 上是否设置了 `lated_name` ( `Bar`) 引​​用父模型 (`Foo`)。 (5认同)

rjv*_*rjv 7

反之亦然。使用Event模型。

def detail(request, venue_id):
    venue = Event.objects.filter(venue__id=venue_id)
    return render(request, 'venue-detail.html', {'venue': venue})
Run Code Online (Sandbox Code Playgroud)

PS:我没用过get_object_or_404()。相应地修改代码。

  • `venue = Event.objects.filter(venue__id=venue_id)` 我认为这个表达式将返回 Event 对象的 QuerySet 而不是 Venue 对象。 (2认同)

Ape*_*pex 6

对于那些拥有“'RelatedManager'对象不可迭代”的人

全部添加以从管理器中检索元素。

{% for area in world_areas.all %}
Run Code Online (Sandbox Code Playgroud)

/sf/answers/1183639971/ (无法将其添加到第一个答案的注释中)