Django Шаблоны: поле «один на один», автоматическое создание - PullRequest
0 голосов
/ 30 марта 2020

Есть ли хороший способ или общий шаблон для автоматического создания one-to-one полей, которые еще не существуют? Концептуально я хочу, чтобы мой OneToOneField работал как get_or_create звонок. Например:

class Foo(models.Model):
    user = models.OneToOneField(User, related_name="foo", unique=True)

class User(models.Model):
    ...
    @property
    def foo(self):
        """
        This is what I want to achieve conceptually.
        """
        foo, created = Foo.objects.get_or_create(...)
        return foo

    ...

user.foo() # if none, will create.

1 Ответ

0 голосов
/ 30 марта 2020

Это предотвратит ненужное попадание в базу данных при каждом доступе к свойству

class Details(models.Model):
    user = models.OneToOneField(User, related_name='d', unique=True) # change related name to 'd' so 'user.details' could be used as the computed property's name

class User(models.Model):
    ...
    @property
    def details(self):
        try:
             return self.d
        except Details.DoesNotExist as e:
             return Details.objects.create(user=self)
    ...

user.details # if none, will create.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...