Python Django admin select订购与默认型号订购不同
我有一个模型(节点),它在管理中按日期排序,所以最新的节点首先显示。这很好 同一模型(节点)被另一个模型(设备)引用。编辑设备时,有一个节点列表(在HTML选择中),该列表也按日期排序。 我希望此选择按名称而不是日期排序 是否可以有两种不同的排序方法,一种用于对象列表,另一种用于选择框Python Django admin select订购与默认型号订购不同,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,我有一个模型(节点),它在管理中按日期排序,所以最新的节点首先显示。这很好 同一模型(节点)被另一个模型(设备)引用。编辑设备时,有一个节点列表(在HTML选择中),该列表也按日期排序。 我希望此选择按名称而不是日期排序 是否可以有两种不同的排序方法,一种用于对象列表,另一种用于选择框 谢谢。最简单的方法是覆盖设备的ModelAdmin中的方法,类似 def formfield_for_foreignkey(self, db_field, request, **kwargs): if d
谢谢。最简单的方法是覆盖
设备的ModelAdmin
中的方法,类似
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'node':
kwargs['queryset'] = Node.objects.order_by('name')
return super(DeviceAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
(我在这里假设了一个合理的数量。希望它是明确的!)
类似地,还有许多人的formfield\u
您是否尝试过类似的方法:
class Node
name = ...
date = ...
fields ....
class Meta:
order_with_respect_to='Device'
ordering = ('Device', 'name')
您可以为DeviceAdmin创建自定义表单,并为“节点”字段设置queryset参数
# in models.py we have Device model with Node field
class Device(models.Model):
node = models.ForeignKey(Node)
...
# in admin.py we have DeviceAdmin with custom form
class DeviceAdminForm(forms.ModelForm):
node = forms.ModelChoiceField(queryset=Node.objects.order_by('name'), label='Node')
class Meta:
model = Device
class DeviceAdmin(admin.ModelAdmin):
form = DeviceAdminForm
我不知道这个选项,+1可以教我一些新的东西,但我不认为它解决了我的问题。这个解决方案仍然需要类似于接受答案中提到的东西,以便在管理面板中获得,以在适当的层次结构中列出值。我想您应该使用get\u MODELNAME\u order()
,而不是order\u by()
,如下所述:谢谢,正如您在这里看到的那样: