django - 在 ManyToMany 和 ForeignKey 中使用 related_name
django - using of related_name in ManyToMany and in ForeignKey
我有两个型号(也用的是auth.user)。 auth.user和Ride模型之间有两个关系,Ride模型和 Destination 模型之间有两个关系。
行程有许多个中间目的地和一个个最终目的地。
该游乐设施有 许多 名乘客和 一个 driver.
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?
- 我应该在目的地字段中输入什么? (中间目的地和最终目的地)?
非常感谢!
既然您已经在 documentation 上阅读过它,我将举一个简单的例子。
您有一个 driver,您想要获取 driver 的所有相关游乐设施的列表。例如:
>>> driver = User.objects.first()
不指定related_name
:
>>> driver.ride_set.all()
在您的代码中指定 related_name
:
>>> driver.rides_as_driver.all()
顾名思义,这是您从相关模型访问模型时使用的名称。因此,如果您有一个用户实例,my_user.rides_as_driver.all()
将为您提供 ride.driver == my_user
的所有游乐设施,而 my_user.rides_as_passenger.all()
将为您提供 ride.passengers
包含 [=14= 的所有游乐设施].
我有两个型号(也用的是auth.user)。 auth.user和Ride模型之间有两个关系,Ride模型和 Destination 模型之间有两个关系。
行程有许多个中间目的地和一个个最终目的地。 该游乐设施有 许多 名乘客和 一个 driver.
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?
- 我应该在目的地字段中输入什么? (中间目的地和最终目的地)?
非常感谢!
既然您已经在 documentation 上阅读过它,我将举一个简单的例子。
您有一个 driver,您想要获取 driver 的所有相关游乐设施的列表。例如:
>>> driver = User.objects.first()
不指定
related_name
:>>> driver.ride_set.all()
在您的代码中指定
related_name
:>>> driver.rides_as_driver.all()
顾名思义,这是您从相关模型访问模型时使用的名称。因此,如果您有一个用户实例,my_user.rides_as_driver.all()
将为您提供 ride.driver == my_user
的所有游乐设施,而 my_user.rides_as_passenger.all()
将为您提供 ride.passengers
包含 [=14= 的所有游乐设施].