Javascript 使用拖放对模型中的条目重新排序
假设我在Django中有一个博客应用程序。如何在默认的管理模式下使用可拖动的表重新排序帖子Javascript 使用拖放对模型中的条目重新排序,javascript,python,django,Javascript,Python,Django,假设我在Django中有一个博客应用程序。如何在默认的管理模式下使用可拖动的表重新排序帖子 如果我不必向模型中添加任何额外字段,这将是最好的,但如果我真的必须添加,我可以。在模型类中,您可能必须添加“订单”字段,以维护特定的订单(例如订单=10的项目是最后一个,订单=1的项目是第一个)。然后,您可以在管理更改列表模板(请参阅)中添加JS代码以维护拖放功能。最后,将模型元中的排序更改为类似于['order']的内容。注意“如果我不必向模型中添加任何额外字段,那将是最好的,但如果我真的必须添加,我可
如果我不必向模型中添加任何额外字段,这将是最好的,但如果我真的必须添加,我可以。在模型类中,您可能必须添加“订单”字段,以维护特定的订单(例如订单=10的项目是最后一个,订单=1的项目是第一个)。然后,您可以在管理更改列表模板(请参阅)中添加JS代码以维护拖放功能。最后,将模型元中的排序更改为类似于['order']的内容。注意“如果我不必向模型中添加任何额外字段,那将是最好的,但如果我真的必须添加,我可以。” 很抱歉,数据库中信息的顺序是由信息本身决定的:您必须始终添加一列进行排序。真的没有选择 此外,要按此顺序检索内容,您需要专门将
.order\u by(x)
添加到查询中,或将ordering
添加到模型中
class InOrder( models.Model ):
position = models.IntegerField()
data = models.TextField()
class Meta:
ordering = [ 'position' ]
如果没有附加字段,则无法进行排序。这是关系数据库的规则之一。要使用代码来实现这一点,请访问。现在有一个很好的用于订购管理对象的软件包 此外,它还内置了对此的支持,您可以尝试此代码段(最初基于此代码段) 集成非常简单 您的模型(在models.py中): 您的管理员(admin.py):
如果负责保存名称和排序的属性在模型中的名称不同,则相应地更改JS(代码段)。只有在模型中添加字段,才能确定顺序。让我们在模型中添加位置字段
class InOrder( models.Model ):
position = models.IntegerField()
data = models.TextField()
class Meta:
ordering = [ 'position' ]
In your models.py
class MainModel(models.Model):
name = models.CharField(max_length=255)
position = models.PositiveSmallIntegerField(null=True)
class Meta:
ordering = ('position',)
In your apps admin.py
class IdeaCardTagInline(nested_admin.NestedStackedInline):
model = MainModel
extra = 0
min_num = 1
sortable_field_name = "position"
Meta中的ordering=('position',)
将根据position字段中的值对main模型进行排序。
sortable\u field\u name=“position”
将有助于在用户拖放多个模型时自动填充位置值
要在api中查看相同的顺序,请在views_model.py中使用order_by(x)。
仅举一个示例:
Model.objects.filter().order_by('position').
对于2011年的django 1.2/1.3,现在最好的解决方案是什么?谢谢,与我想添加的作者相反!不幸的是,django suit的实现不是拖放式的。
Model.objects.filter().order_by('position').