Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django内部联接数据库查询_Django_Postgresql - Fatal编程技术网

Django内部联接数据库查询

Django内部联接数据库查询,django,postgresql,Django,Postgresql,您好,我的项目中有3个模型,希望对它们进行内部连接查询 class Experiment(models.Model): experiment_id = models.AutoField(primary_key=True) experiment_name = models.CharField(max_length=500) class DataFile(models.Model): file_id = models.AutoField(primary_key=True)

您好,我的项目中有3个模型,希望对它们进行内部连接查询

class Experiment(models.Model):
    experiment_id = models.AutoField(primary_key=True)
    experiment_name = models.CharField(max_length=500)

class DataFile(models.Model):
    file_id = models.AutoField(primary_key=True)
    file_name = models.CharField(max_length=500)
    experiment_id = models.IntegerField(blank=True, null=True)
    date = models.DateTimeField(blank=True)
    created_on = models.DateTimeField(auto_now_add=True)

class Analysis(models.Model):
    sample_name = models.CharField(max_length=500)
    file_id = models.IntegerField(blank=True, null=True)
我正在使用postgre,我正在尝试的查询是

select experiment_name,ma.rt
FROM main_experiment me 
INNER JOIN main_datafile md 
ON me.experiment_id = md.experiment_id
INNER JOIN main_analysis ma
ON ma.file_id = md.file_id
我想使用实验id提取所有样本名称 我试过了

和许多其他组合,但我总是得到下面的错误


不允许对自动字段或字段上的联接进行不支持的查找“”

为什么不使用foreignkey?如果你的模特看起来像

class Experiment(models.Model):
    #experiment_id = models.AutoField(primary_key=True) # you don't need to add, django will do it for you.
    experiment_name = models.CharField(max_length=500)

class DataFile(models.Model):
    #file_id = models.AutoField(primary_key=True) # you don't need to add, django will do it for you.
    file_name = models.CharField(max_length=500)
    experiment = models.ForeignKey(Experiment, related_name="data_file")
    date = models.DateTimeField(blank=True)
    created_on = models.DateTimeField(auto_now_add=True)

class Analysis(models.Model):
    sample_name = models.CharField(max_length=500)
    data_file = models.ForeignKey(DataFile, related_name="analysis")
然后你可以做:

Experiment.objects.filter(data_file__analysis__sample_name= 18)

你查过了吗@giaco是的,我试过Analysis.objects.filter(sample_name_uuufile_id=257),但它给了我提到的错误谢谢你的回复,数据库已经创建好了,里面有数据,有没有更简单的方法不用修改当前的表structure@dexter:我认为这是一个棘手的方法,实际上,如果您使用models.ForeignKey更改模型结构,并且只是假装迁移,那么它应该可以正常工作。实验id=models。IntegerField(blank=True,null=True)变为实验id=models。ForeignKey(实验,blank=True,related_name=“data_file”,null=True)和文件id应为:;file_id=models.ForeignKey(DataFile,related_name=“analysis”)。或者:您可以始终执行:analysis=analysis.objects.filter(sample_name=18)。values_list(“file_id”,flat=True)datafiles=DataFile.objects.filter(file_id_in=analysis)。values_list(“实验_id,flat=True)实验=实验。objects.filter(实验_id_in=datafiles)
Experiment.objects.filter(data_file__analysis__sample_name= 18)