我对如何在django admin中执行特定查询集感到迷茫。下面是我的模型。
People(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
在管理员中,我创建了一个自定义操作。
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”,“电话号码”);
g3 = dict(g2)
结果为我提供了“ id”和“电话号码”。
任何帮助将不胜感激。
答案 0 :(得分:0)
您需要通过backwards relation访问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
会更像pythonic / django。