繁体   English   中英

django - 在ManyToMany和ForeignKey中使用related_name

[英]django - using of related_name in ManyToMany and in ForeignKey

我有两个模型(也使用auth.user)。 auth.userRide模型之间有两个关系, Ride模型和Destination模型之间有两个关系。

Ride有许多中间目的地和一个最终目的地。 乘坐有很多乘客和一个司机。

class Destination(models.Model):
    name=models.CharField(max_length=30)

class Ride(models.Model):
    driver = models.ForeignKey('auth.User', related_name='rides_as_driver')
    destination=models.ForeignKey(Destination)
    leaving_time=models.DateTimeField()
    num_of_spots=models.IntegerField()
    passengers=models.ManyToManyField('auth.User', related_name="rides_as_passenger")
    mid_destinations=models.ManyToManyField(Destination)

我试图完全理解related_name属性的含义。 我读了很多关于它的但仍然不确定......

另外我读到如果模型之间有两个关系,我必须使用related_name。

有人可以向我解释一下:

  • 具体是什么related_name属性? 我什么时候使用它?
  • 何时何地我将使用rides_as_driver和rides_as_passenger?
  • 我应该在目的地的字段中放置什么? (中间目的地和最终目的地)?

非常感谢!

顾名思义,这是从相关模型访问模型时使用的名称。 所以,如果你有一个用户实例, my_user.rides_as_driver.all()会给你所有的骑行,其中ride.driver == my_usermy_user.rides_as_passenger.all()会给你所有的骑行,其中ride.passengers包含my_user

既然您已经在文档中阅读了它,我将举一个简单的例子。

您有一个驱动程序,并且您想获得驱动程序的所有相关游乐设施的列表。 例如:

>>> driver = User.objects.first()
  • 没有指定related_name

     >>> driver.ride_set.all() 
  • 通过在代码中指定related_name

     >>> driver.rides_as_driver.all() 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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