Django:外键查询

标签 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) # 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_set。你可以在这里读更多关于它的内容:

http://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward

关于Django:外键查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062955/

相关文章:

django - 如何从json数据更新模型字段?

django - 使用 Git 开发 Django 项目

python - django 完整性错误,我知道为什么,但不知道如何解决

python - 防止在 Django 模型中删除

python - 在 Django 模型中存储列表的最有效方法是什么?

python - 如何在 ModelForm 中使用 forms.ChoiceField()?

python - 如何检查 virtualenv 是否是用 '--no-site-packages' 创建的?

javascript - Javascript的CryptoJS.enc.base64.stringify(data)在Python3/Django中的逆运算是什么?

python - Django 抽象 BaseUser

python - 如何检查你的模型在 Django 中没有错误