1

我有一個android客戶端連接到的django rest api。一個在Django的REST框架API模型被稱爲Debt返回所有用戶債務的查詢集?

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) 

DebtManager我有一個函數命名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 

要檢索用戶的所有債務,我需要得到所有Debt對象,其中paying_user屬性等於user參數(當前用戶)和所有Debt對象,其中receiving_user屬性等於user參數。

如何獲得一個包含所有用戶債務的查詢集?

+0

我建議從DebtManager中刪除'all_debts'函數。它不適合擔任經理的職能。雖然它更適合債務模型的功能 –

回答

2

您可以使用過濾器並簡單地返回queryset。我假設你在方法參數中發送用戶對象。

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

注:我建議從DebtManager刪除all_debts功能。它不適合擔任經理的職能。雖然它更適合Debt模型的功能

+0

好的,但只返回用戶是pay_user的債務對象。那麼用戶是接收用戶的其他債務對象呢? –

+0

您可以使用或在過濾器中。我會更新答案 –