tengo 2 mesas Están unidos por una relación de clave externa. En django, ¿cómo hago el equivalente de
select col1,col2,col3, table2.* from table1 join table2 on table1.table1id = table2.table2id Estoy usando serializers.serialize y como tales values() no funciona en el modelo
EDITAR
Aquí están mis 2 modelos que estoy usando
class UserProfile(models.Model): FbookID = models.CharField( max_length=100, blank=True, verbose_name="facebookid", primary_key=True ) Fname = models.CharField( max_length=100, blank=True, verbose_name="fname" ) profilePic = models.CharField( max_length=256, blank=True, verbose_name="picture" ) Sname = models.CharField( max_length=100, blank=True, ) faccesskey = models.CharField( max_length=255, blank=True, ) userGender = models.CharField( max_length=15, default='MALE') joined = models.DateTimeField( auto_now_add=True, verbose_name = "userjoinedsite" ) last_active = models.DateTimeField( auto_now=True, verbose_name = "lastActiveOnSite" ) #have to refer to other class in strings as this table is not created when this command is run last_loc = models.ForeignKey('user_LocLat',null=True) email = models.EmailField(verbose_name="EmailOfUser") class user_LocLat(models.Model): locationID = models.AutoField( verbose_name="location", null= False, primary_key = True ) FbookIDlat = models.ForeignKey('UserProfile') Date_of_loc = models.DateTimeField( auto_now_add=True ) loc = models.PointField( verbose_name="location", blank=False, null=False ) speed = models.FloatField( verbose_name ='speedms',null=True) Necesito acceder a Fname,Sname,Gender, last_active, email desde UserProfile y loc y speed desde User_latloc. Lo principal es que no puedo incluir faccesskey en la devolución.
Su sql no tiene cláusula where , por lo que para seleccionar todas las ocurrencias:
user_loclat = user_LocLat.objects.all()Luego puede iterar y acceder a los campos, como:
for user_l in user_loclat: loc = user_l.loc Fname = user_l.FbookIDlat.Fname ...O puede usar valores ():
users_data = user_LocLat.objects.all().values(loc, FbookDlat__Fname, ...)cuando se usa django, no es necesario usar SQL directamente (en algunos casos especiales, es posible que lo necesite), pero generalmente django orm es su mejor opción:
por la simplicidad de su cambio de código
FbookIDlat = models.ForeignKey('UserProfile')a esto:
FbookIDlat = models.ForeignKey('UserProfile', related_name='fbookidlats')y eliminar esta línea:
last_loc = models.ForeignKey('user_LocLat',null=True)cuando crea una clave externa, Django maneja la devolución de llamada inversa
suponga que desea obtener información para un perfil:
profile = UserProfile.objects.get(FbookID='fbid') for fbookidlat in profile.fbookidlats.all(): print(fbooidlat.speed)PS-1: lee pep8 , te ayuda a escribir un código más limpio
PS-2: lea este enlace