Пользовательский набор запросов администратора Django для настраиваемого действия - PullRequest
0 голосов
/ 28 декабря 2018

Я немного заблудился о том, как выполнить определенный набор запросов в django admin.Ниже представлены мои модели.

класс Люди (models.Model):

first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=35) 
phone_number = models.CharField(null=True, blank=True, max_length=15)

def __str__(self):
    return self.first_name

class Meta:
    verbose_name_plural = 'People'

класс Group_and_message (models.Model):

name = models.CharField(max_length=30, null=True)
people = models.ManyToManyField(Person)
message_body = models.TextField(max_length=140)
updated = models.DateTimeField(auto_now=True, auto_now_add=False)

def __str__(self):
    return self.name

В Admin у меня естьсоздал пользовательское действие.

def send_message (modeladmin, request, queryset): pass

Мой вопрос, чтобы иметь возможность при выборе объекта "group_and_message" на панели администратора через флажок,быть в состоянии получить "id" и "phone_number" выбранного объекта, чтобы я мог использовать его для выполнения настраиваемого действия "send_message".

Ниже приведен эквивалент базовых нескольких шагов набора запросов, которые демонстрируют, что япытаюсь достичь (только для иллюстрации)

g = Group_and_message.objects.last () # я хочу вместо себя самого последнего;

g1 = g.people.all ()

g2 = g1.values_list ("id", "phone_number");

g3 = dict (g2)

Результат дает мне "id" и "номер телефона"".

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 28 декабря 2018

Вам необходимо получить доступ к Group_and_message через обратное отношение .В этом случае для вас это должно быть group_and_message_set.

def send_message(modeladmin, request,queryset):
    phone_map = dict(People.objects.filter(
        group_and_message_set__in=queryset,
    ).distinct().values_list('id', 'phone_number'))
    # Do something

class Group_and_messageAdmin(admin.ModelAdmin):
    actions = ['send_message']

В качестве отступления в названиях моделей не должно быть подчеркивания.Вместо Group_and_message, было бы более питоническим / django-подобным использовать GroupMessage.

...