我有两个模型(也使用auth.user)。 auth.user 和 Ride 模型之间有两个关系, Ride 模型和目的地模型有两者之间的关系。
Ride拥有多个中间目的地和一个最终目的地。 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。
有人可以向我解释一下:
非常感谢!
答案 0 :(得分:3)
顾名思义,这是您从相关模型访问模型时使用的名称。因此,如果您有一个用户实例,my_user.rides_as_driver.all()
将为您提供ride.driver == my_user
所有的游乐设施,my_user.rides_as_passenger.all()
将为您提供ride.passengers
包含my_user
的所有游乐设施}。
答案 1 :(得分:2)
由于您已经在documentation上阅读了相关内容,我将举一个简单的示例。
您有一个驱动程序,并且您想获得驱动程序的所有相关游乐设施的列表。例如:
>>> driver = User.objects.first()
未指定related_name
:
>>> driver.ride_set.all()
在代码中指定related_name
:
>>> driver.rides_as_driver.all()