Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django admin select订购与默认型号订购不同_Python_Django_Django Models_Django Admin - Fatal编程技术网

Python Django admin select订购与默认型号订购不同

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

我有一个模型(节点),它在管理中按日期排序,所以最新的节点首先显示。这很好

同一模型(节点)被另一个模型(设备)引用。编辑设备时,有一个节点列表(在HTML选择中),该列表也按日期排序。 我希望此选择按名称而不是日期排序

是否可以有两种不同的排序方法,一种用于对象列表,另一种用于选择框


谢谢。

最简单的方法是覆盖
设备
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()
,如下所述:谢谢,正如您在这里看到的那样: