两款车型的Django queryset

2024-04-24 13:45:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种型号:

class AuthUser(models.Model):
    id = models.IntegerField(primary_key=True) 
    password = models.CharField(max_length=128)
    last_login = models.DateTimeField(blank=True, null=True)
    is_superuser = models.BooleanField()
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.CharField(max_length=254)
    is_staff = models.BooleanField()
    is_active = models.BooleanField()
    date_joined = models.DateTimeField()
    username = models.CharField(unique=True, max_length=30)

    class Meta:
        managed = False
        db_table = 'auth_user'

class SocialAuthUsersocialauth(models.Model):
    id = models.IntegerField(primary_key=True)  # AutoField?
    provider = models.CharField(max_length=32)
    uid = models.CharField(max_length=255)
    user = models.ForeignKey(AuthUser, models.DO_NOTHING)
    extra_data = models.TextField()

    class Meta:
        managed = False
        db_table = 'social_auth_usersocialauth'
        unique_together = (('provider', 'uid'),)

我需要在它们之间进行类似SQL连接的操作,并将联接表存储在queryset中。在

我试着这么做:

^{pr2}$

但我有个例外,遇到了重复的字段名:“id”,我不知道如何处理。在


Tags: keyidtruemodelismodelslengthmax
2条回答

应将rename=True属性添加到namedtuple调用

namedtuple('Result', [col[0] for col in desc], rename=True)

您应该使用select_related和{}来实现这些目的。
当您想要从相关模型获取表时,请使用“select \u related”:

SocialAuthUsersocialauth.objects.select_related('user')  

如果要获取所有相关表,请使用“prefetch_related”:

^{pr2}$

它将向您的查询集添加附加属性,并带有相关字段的名称。另外,最好在ForeignKey中添加属性related_name,以获得更明确的用法。在

相关问题 更多 >