Я установил Django Admin Sortable 2 в свой проект Django. Я вижу систему порядка перетаскивания в админке, но когда я перемещаю некоторые объекты, порядок не сохраняется. Я не вижу ошибок в моем журнале терминала при перемещении объектов.
Вот мои файлы Python для модели и администратора. Нужно ли мне делать что-то еще, чтобы получить заказ на сохранение?
Model.py
class QuickLink(models.Model):
title = models.CharField(max_length=20)
image = models.FileField(null=True, blank=False,upload_to='media/quick_links')
link = models.CharField(max_length=200)
order = models.PositiveIntegerField(default=0, blank=False, null=False)
def __str__(self):
return self.title
class Meta(object):
ordering = ['order']
Admin.py
from django.contrib import admin
from adminsortable2.admin import SortableAdminMixin
from .models import QuickLink
@admin.register(QuickLink)
class QuickLinksAdmin(SortableAdminMixin, admin.ModelAdmin):
pass
Мои версии следующие:
Джанго 2.0.4
Python 3.6.1
Django Admin Sortable 2 0.6.19
Попробуйте запустить команду управления:
./manage.py reorder <app.model>
Причина, по которой у меня возникли проблемы с переупорядочением объектов, заключалась в том, что я уже создал объекты при добавлении функции Sortable.
При установке значения по умолчанию для этого значения 0 он установит для них все значение 0. Вернувшись назад и либо воссоздав объекты, либо отредактировав поле в БД в правильном порядке, я смог это исправить.
Также можно создать миграцию данных, которая устанавливает начальный порядок для уже созданной модели.
def reorder(apps, schema_editor):
Tag = apps.get_model("main", "Tag")
order = 0
for item in Tag.objects.all():
order += 1
item.order = order
item.save()
class Migration(migrations.Migration):
dependencies = [
('main', '0011_auto_20190517_1336'),
]
operations = [
migrations.RunPython(reorder, RunPython.noop),
Для записи: в моем случае запись не производилась по нескольким причинам, каждая из которых препятствовала сохранению индекса:
1 / Во встроенном админке я отобразил индекс в readonly_fields.
readonly_fields=[ ...,'myindex',...]
Я решил проблему, определив функцию для отображения индекса:
readonly_fields=[ ...,'myindex',...]
def index(self,obj): #pour pouvoir afficher l'index
return obj.myindex
2 / В моей модели было:
class Meta:
order_with_respect_to = 'series'
и в моем встроенном админке:
ordering=['myindex']
чтобы на странице admin_change были объекты, упорядоченные по родительскому полю, чтобы все связанные поля отображались вместе и во встроенных записях, упорядоченных по индексу
... но это препятствовало сохранению индекса при перемещении записей во встроенном
Поэтому я удалил оба и вставил модель:
class Meta:
ordering=['myindex']
После внесения обоих изменений он работает. Я тестировал, и если сделано только одно из изменений, он все равно не записывает изменение при сохранении