0

我对如何在 django admin 中执行特定的查询集有点迷茫。下面是我的模型。

类人(模型。模型):

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):通过

我的问题是,当通过复选框在管理仪表板中选择“group_and_message”对象时,能够检索所选对象的“id”和“phone_number”,以便我可以使用它来执行“send_message”自定义操作。

下面是一些基本的查询集步骤,展示了我想要实现的目标(仅用于说明目的)

g = Group_and_message.objects.last() #self 而不是 last 是我想要的;

g1 = g.people.all()

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

g3 = 字典(g2)

结果给了我“id”和“电话号码”。

任何帮助将非常感激。

4

1 回答 1

1

您需要通过向后关系访问 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使用GroupMessage.

于 2018-12-28T19:45:57.113 回答