如何在Django模型上执行内部连接,以及从第二个表中的何处返回JSON?

如何在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

尝试使用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(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匹配和获取数据