Джанго админ выбор пользователя - PullRequest
1 голос
/ 20 июня 2019

В администраторе django я пытаюсь создать пользовательский выбор, если поле в базе данных имеет значение None или имеет значение, но я не могу заставить его работать, я могу получить только весь набор запросов, но не могу получить идентификатор данныхчтобы я мог отфильтровать запрос.

Есть предложения?

def formfield_for_choice_field(self, db_field, request, **kwargs):
        ordered = False
        qs = self.get_queryset(request)
        for query in qs:
            if query:
                if query.order:
                    ordered = True
        if db_field.name == "status":
            if ordered:
                kwargs['choices'] = (
                    ('Ordered', 'Ordered'),
                    ('Shipped', 'Shipped'),
                    ('Delivered', 'Delivered'),
                    ('Late', 'Late'),
                    ('Never Arrived', 'Never Arrived'),
                )
            else:
                kwargs['choices'] = (
                    ('Shipped', 'Shipped'),
                    ('Delivered', 'Delivered'),
                    ('Late', 'Late'),
                    ('Never Arrived', 'Never Arrived'),
                )
        return super(xxxxxx, self).formfield_for_choice_field(
            db_field, request, **kwargs)

1 Ответ

0 голосов
/ 20 июня 2019

Поскольку в момент вызова этой функции экземпляр модели уже получен, вы можете просто подключиться к этому извлечению и сделать экземпляр модели доступным в текущем контексте запроса, чтобы вы могли легко использовать его в любом месте, где у вас есть запрос:

def get_object(self, *args, **kwargs):
    request._admin_obj = super(xxxxxx, self).get_object(*args, **kwargs)
    return request._admin_obj

def formfield_for_choice_field(self, db_field, request, **kwargs):
    if db_field.name == "status":
        obj = request._admin_obj
        if obj and obj.order:
            kwargs['choices'] =  # ordered_choices
        else:
            kwargs['choices'] =  # unordered_choices
    return super(xxxxxx, self).formfield_for_choice_field(
        db_field, request, **kwargs)

Другим способом будет использование пользовательского ModelForm в вашем администраторе и переопределение его __init__ для изменения вариантов выбора поля на основе self.instance.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...