Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
Python 如何在Django 1.8中连接表_Python_Mysql_Django - Fatal编程技术网

Python 如何在Django 1.8中连接表

Python 如何在Django 1.8中连接表,python,mysql,django,Python,Mysql,Django,我曾尝试访问django模板中的连接数据,但没有任何效果,非常感谢您的帮助 Model1(): project_code = Foreignkey(another table1) shot_code = charfield(primary_key = True) shot_name = charfield() sequence_name = Integerfield() Model2(): vendor_id = Foreignkey(another table2

我曾尝试访问django模板中的连接数据,但没有任何效果,非常感谢您的帮助

Model1():
   project_code = Foreignkey(another table1)
   shot_code = charfield(primary_key = True)
   shot_name = charfield()
   sequence_name = Integerfield()

Model2():
   vendor_id = Foreignkey(another table2)
   shot_code = Foreignkey(Model1, on_delete= models.CASCADE)
   shot_rate = integerfield()
   shot_bid = integerfield()
我想展示一下

Select * from Model1 a, Model2 b, where a.shot_code = b.shot_code 
and model1.project_code = "XXX"
要在模板中访问的列包括

1. Shot code
2. Shot name
3. Sequence name
4. Shot rate
5. Shot bid
6. Vendor id
我尝试了以下方法

1. Using Select_related
    result = only values of model2 is displayed
    unable to access model1's data, 
    error = 'QuerySet' object has no attribute model1

您可以在Model2中使用Model1查询集的对象并获取数据,请参见以下示例:

model1obj = Model1.objects.get(project_code = "XXX")
model2obj = Model2.objects.get(shot_code = model1obj)

# now access all the fields using model1obj  and model2obj

您希望它返回一个或多个实例吗?最好的方法仍然是使用
select_related
,例如:

Model2.objects.filter(shot_code__project_code=<your value>).select_related("shot_code")

和往常一样,我建议不要将您的
ForeignKey
命名为
vendor\u id
,因为它会将真实id放在
vendor\u id\u id
下,命名会有点不清楚。

这导致1。在db 2上多次点击。在Djago querysets中访问templateIn中的数据时出现混乱,无法多次点击db获取更多信息检查OMG!这件事很有帮助,为什么Django中的连接必须如此复杂,我了解了我所做的错失,感谢解决方案,我错失了使用注释和值。我将按照您的建议重新命名外键,谢谢您总是可以跳过注释并使用
.values()
和相关名称,例如“shot\u code\uu shot\u code”,只是以后在模板中使用不会那么友好;)理解了,但仍然出于好奇,有没有简单的方法来实现这一点?我不知道(但我仍然碰巧发现了一些未知的django特性),至少在直接连接结果方面是这样。select related的工作原理类似,但是您需要通过关系访问所有值(例如,
instance.shot\u code.shot\u code
),当然,创建对象和从db.com检索所有字段会增加额外的开销,此处的开销是使用引用/关系访问单个列,而不是直接连接:(
Model2.objects.filter(shot_code__project_code=<your value>).annotate(
    sequence_name=F("shot_code__sequence_name"),
    shot_name=F("shot_code__shot_name"),
    real_shot_code=F("shot_code__shot_code")
).values(
    "sequence_name", "shot_name", "real_shot_code", "shot_rate", "shot_bid", "vendor_id"
)