Допустим, у меня есть модель кокоса:
class Coconut(models.Model):
carrier = models.ForeignKey('birds.Swallow')
husk_color = models.IntegerField(Choices=COLORS)
Теперь в некоторых случаях я хочу установить носитель в виде или в команде управления, или где угодно.
В других случаяхтем не менее, я бы хотел, чтобы по умолчанию использовалась конкретная ласточка.
У меня возникает соблазн:
BERT_THE_AFRICAN_SWALLOW = Swallow.objects.get(id=7)
def set_carrier(swallow=BERT_THE_AFRICAN_SWALLOW):
self.carrier = swallow
Очевидно, что это неправильно, поскольку оно связано с существующими данными вбаза данных.
Кроме того, это приводит к тому, что бегун тестов блокируется, если приложение "birds" еще не было создано.
Так, каков правильный путь?
Некоторыепримеры случаев, когда я сталкивался с этой проблемой:
- Назначение автоматизированного процесса пользователю-создателю, который на самом деле является своего рода роботом
- В приложениях VOIP, назначая определенные процессык определенному, предварительно определенному объекту PhoneNumber
- В пользовательских сценариях авторизации, комбинируя предварительно определенные привилегии или объекты Permission.