简体   繁体   中英

Django ORM multiple tables query

I trying to make some queries in Django ORM (migration from SQL). My models looks like this


class Iv2(models.Model):
    s_id = models.AutoField(primary_key=True)
    l_eid = models.CharField(max_length=265)
    t_id = models.CharField(max_length=265,unique=True)

class Sv2(models.Model):

    id = models.AutoField(primary_key=True)
    s_id = models.OneToOneField(Iv2, on_delete=models.PROTECT)
    gdd = models.DateTimeField(default=datetime.now)


class Ev2(models.Model):

    id = models.OneToOneField(Iv2, to_field='l_eid', on_delete=models.PROTECT)
    s_id = models.ForeignKey(Iv2, on_delete=models.PROTECT)
    car = models.CharField(max_length=265)

I want to write a query, given t_id (some real search value). I want to get the corresponding Sv2.gdd and Ev2.car

I'm thinking to get s_id and l_eid with the t_id . And when I get s_id . I can query Sv2 and with l_eid I can query Ev2 .

Is it possible to achieve everything with one ORM query ? can prefetch/select_related work here?

"Given t_id of Iv2 get Sv2.gdd and Ev2.car"

First get the Sv2 instance by filtering its 1:1 relation by the real search value t_id :

sv2 = Sv2.objects.filter(s_id__t_id=t_id).first()
sv2.gdd

Now you have 2 options to get Ev2.car

  1. Add related name in Ev2 (more on related_name here ) Assuming your related_name is ev2 you can do: sv2.ev2.car
  2. Use the default django related_name modelname__set sv2.ev2_set

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM