Проблема исходит от вашего дизайна реферальной системы. Обычно в реферальной системе один пользователь имеет один referral_id. Но ваш дизайн предполагает, что у одного пользователя может быть несколько referral_ids.
Я предлагаю вам переместить unique_ref_id в модель CustomUser. Таким образом, вы можете сделать что-то вроде этого:
Refer.objects.create (refer_by = CustomUser.objects.get (unique_ref_id = "exbvagtl"))
2-е предложение : поместите все в одну таблицу
Вы заметите, что человек, ссылающийся на другого человека, также является человеком, так что это в основном ссылка на себя. В этом отношении ваша модель CustomUser может выглядеть следующим образом:
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=32)
last_name = models.CharField(max_length=32)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
referred_by = models.ForeignKey(self, on_delete=models.SET_NULL, blank=True, null=True)
unique_ref_id = models.CharField(max_length=8, blank=True, default=generate())
USERNAME_FIELD = 'email' # unique identifier, changed to email (default was username)
REQUIRED_FIELDS = ['first_name', 'last_name']
objects = CustomUserManager() # custom manager for interacting with database
def __str__(self):
return self.email
Основываясь на этом, вы можете делать такие вещи:
Создать нового пользователя:
sponsor = CustomUser.objects.get(unique_ref_id="exbvagtl")
user = CustomUser(email=email, first_name=first_name, last_name=last_name,referred_by=sponsor)
user.save()
Получить список рефералов пользователя:
sponsor = CustomUser.objects.get(unique_ref_id="exbvagtl")
referrals = CustomUser.objects.filter(referred_by=sponsor)
Надеюсь, это поможет, если у вас есть какие-либо сомнения, не стесняйтесь спрашивать ниже.