Django:外键查询

Django:外键查询,django,django-models,Django,Django Models,我正在学习Django,并试图掌握跨桥接表查询外键的诀窍。抱歉,如果这是重复的,我无法通过搜索找到答案。我有如下定义的模型 class Place(models.Model): id = models.IntegerField(primary_key=True) name = models.CharField(max_length=100) class PlaceRef(models.Model): place = models.ForeignKey(Place) # m

我正在学习Django,并试图掌握跨桥接表查询外键的诀窍。抱歉,如果这是重复的,我无法通过搜索找到答案。我有如下定义的模型

class Place(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=100)
class PlaceRef(models.Model):
    place = models.ForeignKey(Place) # many-to-one field
    entry = models.ForeignKey(Entry) # many-to-one field
class Entry(models.Model):
    id = models.IntegerField(primary_key=True)
    name =  models.CharField(max_length=10)
如果我想检索与特定位置关联的所有条目,我该如何做

place = get_object_or_404(Place, id=id)
placerefs = PlaceRef.objects.filter(place=place)
entries = Entry.objects.filter(id.....)
另外,如果我有更明智的方法来定义(或去掉)Django中的placeref,请随时提出替代方案


谢谢你帮助初学者

首先,我建议将模型改写为:

class Place(models.Model):
  id = models.IntegerField(primary_key=True)
  name = models.CharField(max_length=100)
class Entry(models.Model):
  id = models.IntegerField(primary_key=True)
  name =  models.CharField(max_length=10)
  places = models.ManyToManyField(Place, related_name='places')
因此,您可以查询:

Entry.objects.filter(places__id=id)
在当前模型中:

Entry.objects.filter(placeref_set__place__id=id)
请注意,双下划线用于从一个模型跳到下一个模型。此外,django在模型上创建一些字段,帮助您导航到相关对象。在本例中:
Entry.placeref\u set
。您可以在此处阅读更多信息:


+1用于通过将关系更改为多个来摆脱PlaceRef。尽管值得解释的是,幕后仍然有一个桥接表,但它不会公开,除非您专门定义它并在manytomy上使用
属性。