1

J'ai un api de repos django auquel un client android est connecté. L'un des modèles sur le cadre reste django api est appelé Debt:Retour du jeu de requête de toutes les dettes d'un utilisateur?

class Debt(models.Model): 
    paying_user = models.ForeignKey(User, related_name="paying_user") 
    receiving_user = models.ForeignKey(User, related_name="reeceiving_user") 
    amount = models.FloatField() 
    currency = models.CharField(max_length=10, default="USD") 
    description = models.CharField(max_length=100, blank=True) 
    date_incurred = models.DateTimeField(default=timezone.now) 
    deadline = models.DateTimeField() 
    payed = models.BooleanField(default=False) 
    overdue = models.BooleanField(default=False) 

    class Meta: 
     verbose_name = "Debt" 
     verbose_name_plural = "Debts" 

    objects = DebtManager() 

    def save(self, *args, **kwargs): 
     if self.paying_user == self.receiving_user: 
      raise ValidationError("Users cannot be in debt with themselves.") 
     super(Debt, self).save(*args, **kwargs) 

Dans le DebtManager j'ai une fonction nommée all_debt:

def all_debts(self, user): 
    ''' Returns a queryset of all a user's debts ''' 
    all_debt_queryset = ... # What do I write here? 
    return all_debt_queryset 

Pour récupérer toutes les dettes d'un utilisateur, je besoin d'obtenir tous les objets Debt où l'attribut paying_user est égal au paramètre user (utilisateur actuel) et tous les objets Debt où l'attribut receiving_user est égal au paramètre user.

Comment obtenir un queryset avec toutes les dettes d'un utilisateur?

+0

Je suggère de supprimer la fonction 'all_debts' de DebtManager. Ce n'est pas adapté pour être la fonction d'un manager. Bien qu'il soit mieux adapté pour la fonction du modèle de la dette –

Répondre

2

Vous pouvez utiliser un filtre et retourner simplement le jeu de requête. Je suppose que vous envoyez l'objet utilisateur dans l'argument de la méthode.

from django.db.models import Q 
def all_debts(self, user): 
    return self.objects.filter(Q(paying_user=user) | Q(receiving_user=user)) 

Note: Je suggère supprimer all_debts fonction de DebtManager. Ce n'est pas adapté pour être la fonction d'un manager. Bien que ce soit mieux adapté pour Debt fonction du modèle

+0

Ok, mais cela ne renvoie que les objets de dette où l'utilisateur est l'utilisateur payant. Qu'en est-il des autres objets de dette dont l'utilisateur est l'utilisateur destinataire? –

+0

Vous pouvez utiliser ou dans le filtre. Je vais mettre à jour la réponse –