返回foreignkey关系数据的Queryset

时间:2018-01-09 17:09:57

标签: python django

我正在尝试创建一个返回外键关系数据的查询,但是我没有成功。我想将Radio模型的web字段的数据带到我对模型ProgramasRadiales的查询中。我只设法从Model ProgramasRadiales中获取数据。

模型

class Radio(models.Model):
    usuario = models.ManyToManyField(settings.AUTH_USER_MODEL)
    radio = models.CharField('Nombre de la Emisora', max_length=50)
    web = models.URLField()

    class Meta:
        ordering = ['radio']
        verbose_name_plural = 'radios'

    def __str__(self):
        return self.radio

class ProgramasRadiales(models.Model):

    rango = (
            ('lun', 'Lunes'),
            ('mar', 'Martes'),
            ('mie', 'Miercoles'),
            ('jue', 'Jueves'),
            ('vie', 'Viernes'),
            ('sab', 'Sábado'),
            ('dom', 'Domingo')
        )

    nombre = models.CharField('Nombre del programa de radio', max_length=60)
    dias = MultiSelectField('Selecciona los días', choices = rango, max_length=40)
    inicio = models.TimeField(blank = False, null = True)
    duracion = models.PositiveSmallIntegerField('Duración del programa(minutos)', default=False)
    radios = models.ForeignKey(Radio)

    class Meta:
        ordering = ['nombre']
        verbose_name_plural = 'programas radiales'

    def __str__(self):
        return self.nombre

Querys

datos = ProgramasRadiales.objects.all().values()

结果

<QuerySet [{'nombre': 'Matinal', 'inicio': datetime.time(10, 0), 'radios_id': 2, 'dias': ['mie'], 'duracion': 20, 'id': 3}, {'nombre': 'Nocturnos', 'inicio': datetime.time(18, 0), 'radios_id': 1, 'dias': ['jue', 'vie'], 'duracion': 20, 'id': 4}, {'nombre': 'Siempre Informados', 'inicio': datetime.time(6, 0), 'radios_id': 1, 'dias': ['lun', 'mie', 'vie'], 'duracion': 15, 'id': 2}, {'nombre': 'Tus noticias', 'inicio': datetime.time(7, 0), 'radios_id': 2, 'dias': ['lun', 'mar', 'mie', 'jue', 'vie'], 'duracion': 20, 'id': 1}]>

2 个答案:

答案 0 :(得分:1)

您需要在查询中使用select_related

https://docs.djangoproject.com/en/1.11/ref/models/querysets/#select-related

datos = ProgramasRadiales.objects.select_related("radios").all()

答案 1 :(得分:1)

您需要使用'__'(双下划线运算符)来获取外键数据。

ProgramasRadiales.objects.all().values(
                               'nombre', 'inicio', 'radios__radio', 'radios__web')