2

我对 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

如何DomainNm在 django 1.5 的字段中加入这两个表?

对不起这里的新手。

谢谢你。

4

1 回答 1

3

正如我们在评论中所讨论的,您真正想要的是与当前登录用户关联的所有 Tld 对象的 QuerySet。幸运的是,Django 使这变得相当简单,因为它request.user为您使用当前的用户对象填充对象并在 Tld 和用户模型之间创建一个RelatedManager(如这里所示user.tld_set.all())。

视图.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)

索引.html

<ul>
  {% for tld in tld_set %}
    <li>{{ tld }}</li>
  {% endfor %}
</ul>

从此生成的 SQL 根本不包含任何 JOIN,因为 Django 在request.user调用视图之前已经获取了 User 对象(及其关联的 id)用于填充:

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
于 2013-10-24T17:16:03.327 回答