我正在尝试创建一个返回外键关系数据的查询,但是我没有成功。我想将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}]>
答案 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')