<p>首先,如果您想使排序中间层<code>Model</code>,那么您应该创建自定义中间层<code>Model</code>(显式)。你已经做到了。另外,您试图重写<code>get_queryset()</code>实例方法,在您的<code>Model</code>类中,但这一点都不重要。<code>get_queryset()</code>是<code>Manager/BaseManager</code>类的方法,而不是{<cd1>}类的方法。在</p>
<p>你可以试试这个</p>
<pre><code>SetMeta.objects.filter(item_id=ITEM_ID).order_by('order')
</code></pre>
<p>或者</p>
^{pr2}$
<p>另外,使用<code>select_related()</code><code>QuerySet</code>方法访问相关对象并避免大量的<code>DB</code>点击。它执行<code>SQL JOINS</code>。没别的了。在</p>
<pre><code>SetMeta.objects.select_related('item').filter(item_id=ITEM_ID).order_by('order')
</code></pre>
<p>或者</p>
<pre><code>SetMeta.objects.select_related('set').filter(set_id=SET_ID).order_by('order')
</code></pre>
<p>另外,您可以在<code>SetMeta</code>类上设置默认排序规则。在</p>
<pre><code>class SetMeta(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='itemOrder', max_length=5000)
set = models.ForeignKey(Set, on_delete=models.CASCADE, related_name='SetOrder', max_length=5000)
order = models.IntegerField(default=0, null=True,)
class Meta:
ordering = ('order',)
</code></pre>
<h2>查询中的用法</h2>
<pre><code>items = Item.objects.all()
m2m_model_qs = SetMeta.objects.select_related('item', 'set').filter(item_id__in=items).order_by('order') # performs SQL SubSelect
for instance in m2m_model_qs:
print(instance) # this is instance of m2m model
print(instance.item) # this is instance of Item model. you can access columns also. "instance.item.title"
print(instance.set) # this is instance of Set model. you can access columns also. "instance.set.pk" # for example.
</code></pre>
<p>希望对你有帮助。在</p>