У меня просто есть коллекция языков в модели, подобной этой:
from django.conf.global_settings import LANGUAGES
class AvailableLanguage(models.Model):
code = models.CharField(choices=LANGUAGES, unique=True)
В factories.py
, я хотел бы подделать поле code
.Я попытался получить случайный код локали из LANGUAGES
, но это не удалось.Вместо того, чтобы создавать один экземпляр AvailableLanguage
, он зацикливается на языках и быстро поднимает проблему, потому что для code
установлено значение unique
.
Так что я подумал о создании провайдера как одиночного, и он потерпел неудачупо той же причине.Он генерирует все коды локали вместо предоставления только одного!
class Provider(BaseProvider):
lang_code = NotImplemented
def __init__(self, generator):
self.langs = LANGUAGES
self.generator = generator
def __getattribute__(self, attrib):
if attrib == 'lang_code':
self.lang_code = self.langs.pop()[0]
return self.lang_code
else:
return super().__getattribute__(attrib)
fake.add_provider(Provider)
class AvailableLanguageFactory(DjangoModelFactory):
code = Faker('lang_code')
class Meta:
model = AvailableLanguage