Tengo tres modelos en Django, uno es el modelo de usuario predeterminado de Django.

class ConfigurationDB(models.Model):
    project_id = models.CharField(max_length=250)

    def __unicode__(self):
        return str(self.project_id)


class ProjectAssociated(models.Model):
    user_name = models.ForeignKey(User, verbose_name="User Name")
    configuration = models.ManyToManyField(ConfigurationDB, verbose_name= "Project Associated")

    def __unicode__(self):
        return str(self.user_name)

Obtuve el nombre de usuario de la URL, quiero escribir una consulta de Django para asociar el proyecto con ese usuario y almacenarlo en una lista.

1
Ashish Kumar Verma 11 dic. 2015 a las 15:53

3 respuestas

La mejor respuesta

Prueba esto;

pa = ProjectAssociated.objects.filter(user_name__username=username)

Y para obtener toda la configuración;

configuration = pa.configuration.all()

Aquí obtendrá el conjunto de consultas de configuración y si solo desea la lista de project_id, puede probar esto;

configuration = pa.configuration.all().values_list('project_id', flat=True)
1
Geo Jacob 11 dic. 2015 a las 14:04

Primero, debe buscar un objeto de usuario, para asegurarse de que el nombre de usuario pasado realmente exista. Luego, consulta directamente por ese objeto de usuario .

from django.shortcuts import get_object_or_404, render

def your_view(request, username=None):
   user = get_object_or_404(User, username=username)
   pa = ProjectAssociated.objects.filter(user_name=user)

   return render(request, 'template.html', {'projects': pa})
1
Burhan Khalid 17 dic. 2015 a las 12:33

Hacer simplemente:

ProjectAssociated.objects.filter(user_name__username=username)

Y no necesita ningún trabajo adicional para almacenarlo en la lista, el filtro por defecto devuelve una Lista.

Consejo: en relación con ForeignKey es mejor usar el atributo related_name de la siguiente manera:

user_name = models.ForeignKey(User,verbose_name="User Name", related_name="associated_projects")

Esto puede ser útil en caso de que tenga la instancia de usuario, puede acceder directamente a la relación inversa:

user1 = User.objects.get(username=username_value) # here all the user data
associated_project_list = user1.associated_projects.all() # here the list of his projects

Para acceder a una identificación de proyecto simplemente necesita:

for project in associated_project_list:
    print project.id
0
DhiaTN 17 dic. 2015 a las 12:26