2011-02-28 44 views
1

我有一个M2M关系到用户的模型:我怎么能由M2M-relationtable的PK订购queryresults?

class SomeModel(models.Model): 
    user=models.ManyToManyField(User,related_name='linked',blank=True,null=True) 

,而我有一个查询:

linked_objects=SomeModel.objects.filter(user__id__contains=request.user.id) 

结果将通过用户ID进行排序。我想要做的,是通过用户和SomeModel之间的关系表,这将是appname_somemodel_user的主键对结果进行排序。这可能吗?

+0

那'user__id__contains'似乎没有什么意义。 – 2011-02-28 15:39:09

+0

为什么不呢?它只是检查request.user是否是SomeModel的用户之一。 – marue 2011-02-28 17:14:39

+0

不,它不这样做。这将是'SomeModel.objects.filter(user__id = request.user.id)'。但是,一个更加简单和等效语法是'SomeModel.objects.filter(用户= request.user)' – 2011-03-07 12:09:15

回答

1

可能是错误的这一点,但我认为你可以仅指中介表,如果你自己明确的指定。

class SomeModel(models.Model): 
    user=models.ManyToManyField(User,related_name='linked',blank=True,null=True, through='SomeModelUser') 

class SomeModelUser(models.Model): 
    user = models.ForeignKey(User) 
    some_model = models.ForeignKey(SomeModel) 

linked_objects=SomeModel.objects.filter(user__id__contains=request.user.id).order_by('somemodeluser__pk') 
+0

不能正常工作。我总是得到消息'SomeModel'对象没有属性'somemodeluser'。 – marue 2011-02-28 18:42:14

+0

你使用的是什么版本的Django? 1.1和1.2都适合我。虽然我与@TomaszZielinski一致认为'user__id__contains'没有意义,但它确实工作。 – 2011-03-01 08:44:49

+0

我使用1.2。为什么'用户_id_contains'没有意义?我问,因为我不明白为什么它没有意义,这表明我误解了一些东西。 – marue 2011-03-07 10:58:27