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
для любых новых пользователей. Есть ли какой-нибудь стандартный способ сделать это для старых пользователей? Кажется, есть много возможных решений, но ни одно из них не кажется очень чистым:
- I could
try:
catch RelatedObjectDoesNotExist
every single time I useuser.invite
. This isn't great and seems very unclean. - I could create an accessor method, like
get_invite_code
which does thetry/catch
, and always fetch theuser.invite_code
viauser.get_invite_code()
- 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.
У кого-нибудь есть предложения по наиболее питоническому способу справиться с этим?