Pregunta

Estoy ejecutando el siguiente código (los nombres se cambiaron para proteger a los inocentes, por lo que la estructura del modelo puede parecer extraña):

memberships = 
    models.Membership.objects.filter(
        degree__gt=0.0,
        group=request.user.get_profile().group
    )

exclude_count =  
    memberships.filter(
        member__officerships__profile=request.user.get_profile()
    ).count()

if exclude_officers_with_profile:
    memberships = memberships.exclude(
        member__officerships__profile=request.user.get_profile()
    )

total_count = memberships.count()

que en este punto da como resultado:

OperationalError at /
(1054, "Unknown column 'U1.id' in 'on clause'")

El SQL generado es:

SELECT 
    COUNT(*) 
FROM 
    `membership` 
WHERE (
    `membership`.`group_id` = 2 AND
    `membership`.`level` > 0.0 AND 
    NOT (
        `membership`.`member_id` 
        IN (
            SELECT 
                U2.`member_id` 
            FROM 
                `membership` U0 INNER JOIN `officers` U2 
                ON (U1.`id` = U2.`member_id`) 
            WHERE U2.`profile_id` = 2 
        )
    )
)

Parece que la instrucción ON de SQL Join hace referencia a un alias que no se ha definido. ¿Alguna idea de por qué? Dejé caer mi base de datos MySQL y volví a sincronizar las tablas de mis modelos para intentar asegurarme de que no hubiera inconsistencias allí.

La estructura de los modelos que estoy usando son:

class Membership(models.Model):
    member = models.ForeignKey(Member, related_name='memberships')
    group = models.ForeignKey(Group, related_name='memberships')
    level = models.FloatField(default=0.0)

class Member(models.Model):
    name = models.CharField(max_length=32)

class Officer(models.Model):
    member = models.ForeignKey(Member, related_name='officerships')
    profile = models.ForeignKey(UserProfile)

class UserProfile(models.Model)
    group = models.ForeignKey(Group)

class Group(models.Model)
    pass
¿Fue útil?

Solución

Creo que esto puede ser un síntoma de:

http://code.djangoproject.com/ticket/9188

que se corrigió a partir de la revisión 9589 de django, creo. Ahora cómo averiguar de qué revisión estoy trabajando ...


Confirmado. Cuando implementé el cambio al que se hace referencia en el ticket anterior:

http://code.djangoproject.com/changeset/9589

mi error desapareció.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top