Django values_外键中所有字段的列表

2024-05-23 16:28:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个班有另一个班的外键:

class MyEvent(models.Model): 
    msg = models.ForeignKey(MyMessage)  
    event_type = models.IntegerField(choices=EVENTS_TYPES)

class MyMessage(models.Model): 
    notification = models.IntegerField(choices=EVENTS_TYPES2)  
    name = models.CharField(max_length=20, null=False, blank=False) 
    description = models.CharField(max_length=150, null=False, blank=False) 

结果是:

MyEvent.objects.all().values('msg','event_type')

是:

[{'msg': 18L,'event_type': 1L}, {'msg': 15L,'event_type': 2L}]

但是,是否也可以获取外键(MyMessage)对象的所有值?(我想得到没有明确的参考。-不像在MyEvent.objects.all().values('msg','event_type')中添加'msg_udescription')

我想要的结果是:

[{'msg': 18L,'msg__name': 'dd','msg__description': 'kkk','event_type': 1L}, {'msg': 15L,'msg__name': 'dd','msg__description': 'kkk','event_type': 2L}]

Tags: nameeventfalsemodelmodelstypemsgdescription
3条回答

您应该像这样将相关名称添加到外键

class MyEvent(models.Model): 
    msg = models.ForeignKey(MyMessage,related_name='message')  
    event_type = models.IntegerField(choices=EVENTS_TYPES)

class MyMessage(models.Model): 
    notification = models.IntegerField(choices=EVENTS_TYPES2)  
    name = models.CharField(max_length=20, null=False, blank=False) 
    related_name=description = models.CharField(max_length=150, null=False, blank=False) 

然后可以用相关名称检索它。像这样:

objs=MyEvent.objects.all()
objs[0].message.all() # this is the Mymessage record

然后你可以创建你喜欢的列表

使用基于MyMessage._meta的列表理解,可以创建一个字段名列表,每个值前面都有msg__。然后简单地使用.values(*list_of_fields)解压这些值。

除此之外,这是不可能的。values()只接受字段名作为位置参数,因此在调用values()之前必须隐式生成参数。

可以在值函数中引用外键属性:

MyEvent.objects.all().values('msg','event_type', 'msg__name', 'msg__description')

相关问题 更多 >