0
0 комментариев

Есть две модели:

class AuthUser(models.Model):
id = models.IntegerField(primary_key=True)  # AutoField?
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 JOIN и получить содержимое этих таблиц в одном запросе по фореигн кею.

Пробовал делать так:

def namedtuplefetchall(cursor):
desc = cursor.description
nt_result = namedtuple('Result', [col[0] for col in desc])
return [nt_result(*row) for row in cursor.fetchall()]
 
def examp(request):
context = dict()
cursor = connection.cursor()
cursor.execute("""
SELECT *
FROM auth_user
JOIN social_auth_usersocialauth
ON auth_user.id = social_auth_usersocialauth.user_id
""")
context['usersauth'] = namedtuplefetchall(cursor)
return render(request, 'try.html', context)

Но выскакивает ошибка Encountered duplicate field name: ‘id’, которую я не могу придумать как обойти. Может возможно это сделать как-то средствами django, но я не нашёл как.


Добавить комментарий