【问题标题】:Inner join in python-django frameworkpython-django框架内连接
【发布时间】:2016-01-05 00:07:49
【问题描述】:

我有 2 个模型。

from django.db import models

class User(models.Model):
    user_id = models.AutoField(primary_key=True)
    user_name = models.CharField(max_length=30)
    f_name = models.CharField(max_length=30)
    l_name = models.CharField(max_length=30)

    class Meta:
        db_table = "users"

class Address(models.Model):
    add_id = models.AutoField(primary_key=True)
    user_id = models.CharField(max_length=30)
    user_address = models.CharField(max_length=300)

    class Meta:
        db_table = "address"

我有一个 SQL 查询

select u.*,a.user_address from users u inner join address a on a.user_id = u.user_id;

我想使用 django 模型来实现这个查询。 我是 Django 框架的新手。

我正在尝试下面的查询,但它没有返回正确的输出。

user = User.objects.filter(user_id__in=Address.objects.values_list('user_id'))

【问题讨论】:

  • 您是在使用旧数据库还是这是一个新项目?为什么您没有在 Address.user_id 字段中使用 foreign key
  • 这是旧数据库。你能告诉我如何使用现有数据库执行内部连接吗?还是我必须制作外键 Address.user_id?

标签: python mysql django


【解决方案1】:

查看您的模型,您可以将 user 设为外键,而无需更改数据库架构。

class Address(models.Model):
    add_id = models.AutoField(primary_key=True)
    user = models.ForeignKeyCharField(max_length=30)
    ...

如果您有address 实例,则可以使用address.user 访问user,使用address.user_id 访问user_id

如果您有地址查询集,则可以使用select_related() 使 Django 加入用户表。

addresses = Address.objects.all().select_related('user')
for address in address:
    # access a field on the address model
    print(address.user_address)
    # access a field on the user model through the foreign key
    print(address.user.user_name)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2016-07-20
    • 2016-06-03
    • 2017-10-17
    相关资源
    最近更新 更多