Как мы будем считать пользователей?

class User(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    mobile_number = models.IntegerField()
    cnic = models.CharField(max_length=13)
    blood_group = models.CharField(max_length=10)
    last_donation = models.DateTimeField(auto_now_add=True)


class Donation(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name= 'donation')    
    donation_count = models.IntegerField(default= 1)


class UserForm(ModelForm):
    class Meta:
        model = User
        fields = "__all__"

    def clean_cnic(self):
        cnic = self.cleaned_data['cnic']
        obj = User.objects.filter(cnic=cnic).exists()
        if not obj:
            return cnic
        try:
            u_obj = User.objects.get(cnic=cnic)
        except User.DoesNotExist:
            raise ValidationError("User Does not exist")
        if u_obj:
            previous_date = u_obj.last_donation
            current_date = datetime.now().astimezone()
            final = current_date - previous_date
            print(final)
            if final < timedelta(days= 90 ):
                raise ValidationError("U have to wait 90 days to complete")  
            return cnic 

    def clean_blood_group(self):
        cnic = self.cleaned_data.get("cnic")
        blood_group = self.cleaned_data['blood_group']
        if not User.objects.filter(cnic = cnic).exists():
            return blood_group
        obj = User.objects.get(cnic = cnic)
        if obj.blood_group == blood_group:
            return blood_group    
        raise ValidationError("Blood group does not match")

Первый раз пользователь придет и сдаст кровь Хорошо, но теперь условие таково, что существующий пользователь может сдать кровь через 3 месяца. Теперь я должен проверить, какой пользователь сдавал кровь сколько раз Как я могу подсчитать пользователей Я искал слишком много, но не нашел ничего связанного с этим Может кто-нибудь помочь мне У меня есть две модели. Заранее спасибо
enter image description here

Вернуться на верх