2
コンテキスト: 私は2つの日付のモデルを持っていますが、両方ともfactory.Faker
を使用したいのですが、2番目の日付は常に最初の日付より大きくする必要があります。lazy_attributeをFactory BoyのFakerで使用する方法
私はこの試みた:
モデルの抜粋:
class Event(models.Model):
execution_start_date = models.DateTimeField()
execution_end_date = models.DateTimeField()
工場:
class EventFactory(factory.DjangoModelFactory):
class Meta:
model = Event
strategy = factory.BUILD_STRATEGY
execution_start_date = factory.Faker('date_time_this_year', tzinfo=pytz.utc)
@factory.lazy_attribute
def execution_end_date(self):
return factory.Faker('date_time_between_dates',
datetime_start=self.execution_start_date,
datetime_end=now(),
tzinfo=pytz.utc)
をしかし、私はこの得たのpythonシェルから工場を使用しようとすると:
をIn [3]: e = EventFactory()
In [4]: e.execution_end_date
Out[4]: <factory.faker.Faker at 0x1103f51d0>
オン私がそれをうまく動作させる方法は、次のようなものでした:
@factory.lazy_attribute
def execution_end_date(self):
# return factory.Faker('date_time_between_dates',
# datetime_start=self.execution_start_date,
# datetime_end=now(),
# tzinfo=pytz.utc)
faker = factory.Faker._get_faker()
return faker.date_time_between_dates(datetime_start=self.execution_start_date,
datetime_end=now(),
tzinfo=pytz.utc)
しかし、私は正直なところ、それを行うより良い方法があると思います。
私の依存関係は、以下のとおりです。
- ジャンゴ(1.8.18)
- 工場出荷時の少年(2.8.1)
- 偽物(0.7.17)
私は両方の図書館の目的が一定の規則に従ってランダムなデータを生成することから、factory-boyとFakerに固執したいと思います。 "もし既に私が持っているなら、ルーチン。さらに、私は、あなたの答えが「または他の方法でランダムな日付を生成する」ことを指摘したいと思います。それはFakerでしょう。 Pythonで日付を扱うときにコーナーケースがたくさんあります。最良の選択肢は、コーナーケース(タイムゾーン処理など)をカバーするライブラリを使用することです。 – diegueus9
@ diegueus9はい、私は数日前に私を理解しています。これを正確に行う方法を見つけました。私は別の解決策で自分の答えを編集する。 –
そうです、2番目のソリューションが動作します – diegueus9