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.
3 respuestas
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)
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})
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
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.