我对django在(2)或更多表之间加入记录的能力略显不熟悉。
例如,我有两个表:
在普通的旧SQL中,我会在id
字段
我在django的 model.py 中设置了此关系:
class Tld(models.Model):
domainNm = models.CharField(verbose_name="",max_length=40,unique=True,validators=[RegexValidator('^[a-zA-Z0-9]+\.[a-zA-Z]{1,4}$','format: domain.com only','Invalid Entry')])
FKtoClient = models.ForeignKey(User)
User
表是默认的django表(在最初运行python manage.py syncdb
时创建)
如何在django 1.5中的字段DomainNm
上加入这两个表?
对不起这里的新手。
谢谢。
答案 0 :(得分:3)
正如我们在评论中所讨论的那样,您真正想要的是与当前登录用户关联的所有Tld对象的QuerySet。幸运的是,Django使这一点变得相当简单,因为它为您填充了当前User对象的request.user
对象,并在Tld和User模型之间创建了RelatedManager(如user.tld_set.all()
所示)。
<强> views.py 强>:
from django.shortcuts import render
def index(request):
if request.user.is_anonymous():
tld_set = []
else:
tld_set = request.user.tld_set.all()
context = {'tld_set': tld_set}
return render(request, 'index.html', context)
<强>的index.html 强>:
<ul>
{% for tld in tld_set %}
<li>{{ tld }}</li>
{% endfor %}
</ul>
由此生成的SQL根本不包含任何JOIN,因为Django已经抓住了User对象(以及它的关联id),用于在调用视图之前填充request.user
:
SELECT "rcr_tld"."id", "rcr_tld"."FktoClient_id", "rcr_tld"."domainNm"
FROM "rcr_tld"
WHERE "rcr_tld"."FktoClient_id" = 1 --Django already knows the User's id from request.user.id