如何通过多级反向查找获取对象
How to fetch object with multiple levels of reverse lookup
在我的项目中,一共有三个模型:
class Level1(models.Model):
name = models.CharField(max_length=250)
class Level2(models.Model):
name = models.CharField(max_length=250)
level1 = models.ForeignKey(Level1, on_delete=models.RESTRICT)
class Level3(models.Model):
name = models.CharField(max_length=250)
level2 = models.ForeignKey(Level2, on_delete=models.RESTRICT)
Level1 模型有 2 个对象 WA
、TX
。 Level2有5个对象AAA
,BBB
外键为WA
; AAA
、CCC
、DDD
其中外键是 TX
.
在Level3中,我想添加一个对象RRRR
,其中Level2外键对象是AAA
.
当我尝试通过 Level2.objects.get(name='AAA')
获取 Level2 时,它显示错误 get() returned more than one Level2 -- it returned 2!
如何解决这个问题。提前致谢。
是的,这是因为 get 方法将只允许检索一个您可以使用的对象
Level2.objects.filter(name='AAA')
get
期望只找到一个对象,否则会出错。您可以添加更多查找
Level2.objects.filter(name='AAA', level1__name='WA') or
Level2.objects.filter(name='AAA', level1__name='TX')
Alhamdulillah,最后我通过结合 filter 和 get.
解决了这个问题
Level2.objects.filter(level1__name='WA').get(name='AAA')
在我的项目中,一共有三个模型:
class Level1(models.Model):
name = models.CharField(max_length=250)
class Level2(models.Model):
name = models.CharField(max_length=250)
level1 = models.ForeignKey(Level1, on_delete=models.RESTRICT)
class Level3(models.Model):
name = models.CharField(max_length=250)
level2 = models.ForeignKey(Level2, on_delete=models.RESTRICT)
Level1 模型有 2 个对象 WA
、TX
。 Level2有5个对象AAA
,BBB
外键为WA
; AAA
、CCC
、DDD
其中外键是 TX
.
在Level3中,我想添加一个对象RRRR
,其中Level2外键对象是AAA
.
当我尝试通过 Level2.objects.get(name='AAA')
获取 Level2 时,它显示错误 get() returned more than one Level2 -- it returned 2!
如何解决这个问题。提前致谢。
是的,这是因为 get 方法将只允许检索一个您可以使用的对象
Level2.objects.filter(name='AAA')
get
期望只找到一个对象,否则会出错。您可以添加更多查找
Level2.objects.filter(name='AAA', level1__name='WA') or
Level2.objects.filter(name='AAA', level1__name='TX')
Alhamdulillah,最后我通过结合 filter 和 get.
解决了这个问题Level2.objects.filter(level1__name='WA').get(name='AAA')