如何在Django-autocomplete-light中订购初始数据

时间:2018-02-10 08:41:02

标签: python django django-forms django-autocomplete-light

我希望使用Django-autocomplete-light ModelSelect2Multiple通过模型数据更新多对多,但在使用get_initial()将数据发送到表单时,数据不按发送数据的顺序显示;它将显示在数据库注册顺序中。

如何通过模型以排序顺序在ModelSelect2Multiple中显示数据?

ModelSelect2Multiple在注册新数据时效果很好。

这是我的model.py

class Writer(models.Model):
    name = models.CharField()

class Event(models.Model):
    name = models.CharField()
    writer = models.ManyToManyField(Writer, through="Attend", related_name='attends')

class Attend(models.Model):
    event = models.ForeignKey(Event)
    writer = models.ForeignKey(Writer)
    number = models.PositiveSmallIntegerField(default=0)

这是我的preview.py

class EventUpdateFormPreview(FormPreview):
    form_template = "app/event_update.html"
    preview_template = "app/event_update_preview.html"

    def get_initial(self, request):
        event = Event.objects.get(id=self.state["event_id"])
        return {
        'name': event.name,
        'writer': [x.pk for x in event.writer.all().order_by('attend__number')],
        }

这是我的forms.py

class EventUpdateForm(forms.ModelForm):
    name = forms.CharField(label='event name')
    writer = forms.ModelMultipleChoiceField(
    label='Attends',
    queryset=Writer.objects.all(),
    widget=autocomplete.ModelSelect2Multiple(
        url='app:writer_autocomplete',
        )
    )

数据库中的注册顺序

  1. 作家Mr.A(pk = 1)
  2. 作家Mr.B(pk = 2)
  3. 作家Mr.C(pk = 3)
  4. 作家Mr.D(pk = 4)
  5. 注册活动中与会者的顺序(初次注册时会成功)

    1. 作家Mr.D(pk = 4)
    2. 作家Mr.A(pk = 1)
    3. 作家Mr.C(pk = 3)
    4. 更新视图上显示的订单

      1. 作家Mr.A(pk = 1)
      2. 作家Mr.C(pk = 3)
      3. 作家Mr.D(pk = 4)
      4. 环境:
        Django的== 1.11.6
        Django的自动填充光== 3.2.10

        请原谅我的英语不好,非常感谢你。

0 个答案:

没有答案