Tengo esto en modelos:
class CustomUser(AbstractUser): selectat = models.BooleanField(default=False) def __str__(self): return self.username class Score(models.Model): VALUE = ( (1, "Nota 1"), (2, "Nota 2"), (3, "Nota 3"), (4, "Nota 4"), (5, "Nota 5"), (6, "Nota 6"), (7, "Nota 7"), (8, "Nota 8"), (9, "Nota 9"), (10, "Nota 10"), ) user_from = models.ForeignKey(settings.AUTH_USER_MODEL, default=0) user_to = models.ForeignKey(settings.AUTH_USER_MODEL, default=0, related_name='user_to') nota = models.PositiveSmallIntegerField(default=0, choices=VALUE) def __str__(self): return str(self.user_to)¿Cómo puedo acceder a los objetos de puntuación teniendo al usuario?
Cuando le doy al usuario un objeto para puntuar, puedo obtener las notas.
x = Score.objects.filter(user_to__username='Fane') x <QuerySet [<Punctaj: Fane>, <Punctaj: Fane>]> for a in x: print(a.nota) 1 5Quiero usar algo como esto:
y = CustomUser.objects.get(id=7) x = x.score.all() for a in x: print(a.nota) 1 5Pero esto no funcionará, me está dando:
Traceback (most recent call last): File "<input>", line 1, in <module> AttributeError: 'CustomUser' object has no attribute 'score'Tiene dos claves externas de CustomUser a Score. El primero, user_from , no establece un nombre relacionado, por lo que usa el valor predeterminado, que es score_set :
x = y.score_set.all()El segundo establece un nombre relacionado, por lo que usa eso:
x = y.user_to.all() Tenga en cuenta que esto no tiene mucho sentido como nombre relacionado, ya que apunta a puntajes, no a usuarios; probablemente debería ser algo así como scores_to_user .