Как настроить переупорядочение элементов order_with_respect_to в Django admin? - PullRequest
3 голосов
/ 13 января 2020

Я пытаюсь использовать опцию order_with_respect_to Django Meta и изменить порядок элементов в админке.

Я нашел https://github.com/bfirsh/django-ordered-model, но они не Кажется, для него не используется собственный Django API.

Знаете ли вы, что эту функцию переупорядочения можно добавить к Django admin?

Модель выглядит следующим образом:

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'

Я бы хотел изменить порядок ответов администратора.

1 Ответ

1 голос
/ 15 апреля 2020

Я не знаю, является ли это лучшим способом, но он работает: вы можете предоставить администратору свой собственный ModelForm, включая дополнительное поле (например, здесь: django -admin-add- настраиваемые поля формы, которые не являются частью модели ).

Код для приведенного выше примера может выглядеть примерно так (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__'
...