如何在 Django 管理中配置重新排序 order_with_respect_to 项目?

Nat*_*tim 5 python django django-models django-admin

我正在尝试使用order_with_respect_to Django Meta 选项并在管理中重新排序项目。

我找到了https://github.com/bfirsh/django-ordered-model但他们似乎没有使用原生的 Django API。

您知道有人将这种重新排序功能添加到 Django 管理员吗?

该模型如下所示:

from django.db import models

class Question(models.Model):
    text = models.TextField()

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    text = models.TextField()

    class Meta:
        order_with_respect_to = 'question'
Run Code Online (Sandbox Code Playgroud)

我希望能够重新排列管理员的答案。

小智 1

我不知道这是否是最好的方法,但它似乎有效:您可以向管理员提供您自己的 ModelForm,包括一个额外的字段(如下所示:django-admin-add-custom-form-fields-that-不是模型的一部分)。

上面示例的代码可能如下所示(forms.py):

from django import forms

from .models import Question

class QuestionAdminForm(forms.ModelForm):
    assign_order = forms.CharField(
        max_length=50,
        help_text=("Enter order of ids in comma separated list, "
                   "e.g. '0,1,2,3'")
        )

    def save(self, commit=True):
        instance = super().save(commit)
        assign_order = self.cleaned_data.get('assign_order', None)
        order_list = [int(num) for num in assign_order.split(',')]
        instance.set_answer_order(order_list)
        if commit:
            instance.save()
        return instance

    class Meta:
        model = Question
        fields = '__all__'
Run Code Online (Sandbox Code Playgroud)