如何在Django模型上执行内部连接,以及从第二个表中的何处返回JSON?
尝试使用Django模型,对特定列执行内部联接,然后对第二个表中的列执行WHERE 我需要以下命令:如何在Django模型上执行内部连接,以及从第二个表中的何处返回JSON?,django,django-models,django-rest-framework,django-views,Django,Django Models,Django Rest Framework,Django Views,尝试使用Django模型,对特定列执行内部联接,然后对第二个表中的列执行WHERE 我需要以下命令: SELECT * FROM Songs INNER JOIN Artists ON Songs.PageURL = Artists.PageURL WHERE IsSingle = 1 AND Artist like 'Singer%' ORDER BY Entry_At DESC 这是我的模特 from django.db import models class Artists(mode
SELECT * FROM Songs INNER JOIN Artists ON Songs.PageURL = Artists.PageURL WHERE IsSingle = 1 AND Artist like 'Singer%' ORDER BY Entry_At DESC
这是我的模特
from django.db import models
class Artists(models.Model):
artist = models.CharField(db_column='Artist', max_length=400) # Field name made lowercase.
pageurl = models.CharField(db_column='PageURL', primary_key=True, max_length=400) # Field name made lowercase.
albumurl = models.CharField(db_column='AlbumURL', max_length=400) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Artists'
unique_together = (('pageurl', 'artist'),)
class Lyrics(models.Model):
lyrics = models.CharField(db_column='Lyrics', max_length=400) # Field name made lowercase.
pageurl = models.CharField(db_column='PageURL', primary_key=True, max_length=400) # Field name made lowercase.
albumurl = models.CharField(db_column='AlbumURL', max_length=400) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Lyrics'
unique_together = (('pageurl', 'lyrics'),)
class Music(models.Model):
music = models.CharField(db_column='Music', max_length=400) # Field name made lowercase.
pageurl = models.CharField(db_column='PageURL', primary_key=True, max_length=400) # Field name made lowercase.
albumurl = models.CharField(db_column='AlbumURL', max_length=400) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Music'
unique_together = (('pageurl', 'music'),)
class Songs(models.Model):
index = models.IntegerField(db_column='ID') # Field name made lowercase.
entry_at = models.DateTimeField(db_column='Entry_At') # Field name made lowercase.
issingle = models.IntegerField(db_column='IsSingle') # Field name made lowercase.
title = models.CharField(db_column='Title', max_length=400, blank=True, null=True) # Field name made lowercase.
album = models.CharField(db_column='Album', max_length=400, blank=True, null=True) # Field name made lowercase.
label = models.CharField(db_column='Label', max_length=400, blank=True, null=True) # Field name made lowercase.
release_date = models.CharField(db_column='Release_Date', max_length=400, blank=True, null=True) # Field name made lowercase.
code = models.CharField(db_column='Code', unique=True, max_length=40, blank=True, null=True) # Field name made lowercase.
link_320 = models.CharField(db_column='Link_320', max_length=400, blank=True, null=True) # Field name made lowercase.
link_128 = models.CharField(db_column='Link_128', max_length=400, blank=True, null=True) # Field name made lowercase.
link_48 = models.CharField(db_column='Link_48', max_length=400, blank=True, null=True) # Field name made lowercase.
imageurl = models.CharField(db_column='ImageURL', max_length=400, blank=True, null=True) # Field name made lowercase.
pageurl = models.CharField(db_column='PageURL', primary_key=True, max_length=400) # Field name made lowercase.
albumurl = models.CharField(db_column='AlbumURL', max_length=400) # Field name made lowercase.
class Meta:
managed = False
db_table = 'Songs'
我已经看到了过滤器、选择相关和其他选项。但我无法让它们工作,也无法从上面得到我需要的具体查询。您有两个选择。首先,可以对数据库执行原始SQL语句。我知道那不是你想要的,但你可以这么做 有时,我发现我获得了更好的性能,因为我可以使用原始SQL编写一条SQL语句,而不是使用当前的记录方法,而且我非常喜欢控制
第二,如果您想使用ORM,那么您需要告诉ORM您的表是如何相关的。您需要设置外键,以便ORM可以为您执行连接。请参阅,然后您可以选择相关的或使用…对象进行筛选。筛选歌曲艺术家等您是如何定义forginkey关系的?我不相信我的表有外键关系。PageURL是所有表中的键,对所有行都是唯一的。我使用它通过SQL匹配和获取数据