Как связать две таблицы, чтобы узнать, какое значение включено в поле ManyToMany в Django?
Надеюсь, что название не такое запутанное, как я думал. В настоящее время у меня есть таблица PaymentsData:
class PaymentsData(models.Model):
match = models.CharField(max_length=30)
amount = models.DecimalField(default = 0, max_digits = 5, decimal_places = 2)
players = models.ManyToManyField(Profile, blank=True)
playerspaid = models.ManyToManyField(Profile, related_name='paid', blank=True)
datespent = models.DateField('Date Spent')
def __str__(self):
return self.match
Это поле используется для создания матчей и включает количество игроков, которые играли в разделе игроков, и когда они заплатили, переместите их в поле playerspaid. Я хотел сделать это с помощью другой таблицы, я хотел представить всех игроков по отдельности, и включить матчей, за которые они должны заплатить (что мы можем узнать, получив игроков в PaymentsData выше). Таким образом, это должно выглядеть примерно так:
class PlayersPaymentDetails(models.Model):
player = models.OneToOneField(Profile, on_delete=models.CASCADE)
matches = models.ManyToManyField(PaymentsData, blank=True)
amountdue = models.DecimalField(default = 0, max_digits=5, decimal_places = 2)
здесь в матчах, он должен показывать все матчи, которые игрок выбрал в поле игроков в PaymentsData, а amountdue должен показывать, сколько игрок должен всего.
Я попробовал настроить модель с помощью метода save(), однако когда players снимается выделение с PaymentsData, это не изменяет таблицу PlayersPaymentDetails
Надеюсь, кто-нибудь сможет помочь, спасибо. Дайте мне знать, если это не ясно.
Зачем вам нужна еще одна таблица? Вы можете получить совпадения следующим образом:
player = Profile.objects.get(...) # get the player you want
matches = player.paymentsdata_set.all()
и amountdue
:
from django.db.models import Sum
player = Profile.objects.get(...) # get the player you want
amountdue = player.paymentsdata_set.all().aggregate(amountdue=Sum('amountdue'))['amountdue']