Django: норма для обработки несозданных полей OneToOneFields

Вот пример модели:

class User(models.Model):
   ...

Позже я хочу добавить модель Invite OneToOne:

# This is arbitrarily named.
class InviteCode(models.Model):
   user = models.OneToOneField(User, related_name="invite_code")
   ...


# signals.py
@receivers(signals.post_save, sender=User)
def create_invite_code(sender, instance, created, **kwargs):
   if created:
      invite_code = InviteCode.objects.create(user=user)

Теперь для новых пользователей я могу удобно сделать user.invite_code для любых новых пользователей. Есть ли какой-нибудь стандартный способ сделать это для старых пользователей? Кажется, есть много возможных решений, но ни одно из них не кажется очень чистым:

  1. I could try: catch RelatedObjectDoesNotExist every single time I use user.invite. This isn't great and seems very unclean.
  2. I could create an accessor method, like get_invite_code which does the try/catch, and always fetch the user.invite_code via user.get_invite_code()
  3. I could run a migration, such that all old users have an Invite Code created, and all new users have an invite code object via the signal.

У кого-нибудь есть предложения по наиболее питоническому способу справиться с этим?

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