0

In my project, there are three models:

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 model has 2 objects WA, TX. Level2 has 5 objects AAA, BBB where the foreign key is WA; and AAA, CCC, DDD where the foreign key is TX.

In Level3, I want to add an object RRRR where the Level2 foreign key object is AAA.

When I tried to fetch the Level2 by Level2.objects.get(name='AAA'), it shows error get() returned more than one Level2 -- it returned 2!

How to solve this issue. Thanks in advance.

Carmoreno
  • 1,271
  • 17
  • 29

3 Answers3

0

yes this is because get method will allow to retrieve only one object you can use

Level2.objects.filter(name='AAA')
steve harvey
  • 110
  • 7
  • this will retrieve 2 level2 objects, bother are foreign keyed to different level1 object. I want to add one object in Level3 model. – Bayezid Talukdar Jun 18 '21 at 15:36
0

get expects to find only one object and will error otherwise. You can add more lookups

Level2.objects.filter(name='AAA', level1__name='WA') or 
Level2.objects.filter(name='AAA', level1__name='TX')
Mark Rofail
  • 808
  • 1
  • 8
  • 18
0

Alhamdulillah, finally I solve the issue by combining filter and get.

Level2.objects.filter(level1__name='WA').get(name='AAA')