我有以下设置:
class Ride(models.Model):
...
riders = models.ManyToManyField(User, through='RideRiders', null=True, blank=True)
class Meta:
db_table = 'rides'
app_label = 'rides'
class RideRiders(models.Model):
user = models.ForeignKey(User)
ride = models.ForeignKey(Ride)
# Other information
...
class Meta:
db_table = 'rides_riders'
app_label = 'rides'
所以,例如,我可以使用以下内容为用户获取所有游乐设施(这实际上是最好的方式吗?):
Ride.objects.filter(riders__id=user_id)
我希望能够让所有用户参与特定的游戏,但似乎无法弄清楚如何。这个RideRiders模型似乎是一个棘手的问题,因为我似乎无法将其超越用户。例如:
Ride.objects.get(id=ride_id).riders.all()
...给出一个RideRider对象列表(我认为)。
有什么建议吗?
编辑: 为了添加更多上下文,我尝试使用Django Rest框架作为API调用来获取特定骑行的骑手。这就是我使用它的方式:
class RideRiders(generics.ListAPIView):
model = User
serializer_class = RiderSerializer
def get_queryset(self):
return Ride.objects.get(id=self.kwargs.get('id')).riders.all()
但是这正在给我一个错误,这就是我觉得它返回RideRider对象而不是Rider对象的原因。
FieldError: Cannot resolve keyword u'ride' into field. Choices are: date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, password, user_permissions, username
编辑2:
所以Ride.objects.get(id=self.kwargs.get('id')).riders.all()
抛出了上述错误(与序列化器无关)。如果我运行Ride.objects.get(id=self.kwargs.get('id')).rideriders_set.all()
然后它返回一个查询集(并且测试给出了任何特定骑行的预期记录数)。那么,这就留下了如何返回用户列表(而不是RideRider对象)的原始问题?
答案 0 :(得分:0)
在对整个应用程序进行一些重构之后,模型类中的罪魁祸首证明是app_label = 'rides'
是不正确的。这显然阻止了Django在模型之间进行正确的查找,因为它们没有被正确注册。