fake.date_between volver siempre la misma fecha en un bucle
Intento implementar un poco para crear objetos de Django con fecha aleatoria durante los últimos 2 años
Uso Faker y funciona cuando lo uso en una concha de pitón: cada vez que llamo falso.date_between(start_date='today', end_date='+2y') retunr un nuevo objeto de fecha
pero quiero hacer lo mismo en la migración de datos de django pero no entender por qué siempre devuelve el mismo valor
fake = Faker()
for order in range(0,total_orders + 1):
Orders.objects.create(
table = random.sample(tables,k=1)[0],
customers = random.randrange(1,6),
split_bill = random.randrange(1,3),
delivered = True,
paid = True,
created_at = fake.date_between(start_date='today', end_date='+2y')
)
Guardar 2020-12-16 17:57:04.203858+01
en base de datos postgresql
Pregunta hecha hace 3 años, 5 meses, 6 días - Por geekglitcher1735
2 Respuestas:
-
El problema que estás experimentando es que al ejecutar el código dentro de un bucle, el valor devuelto por
fake.date_between(start_date='today', end_date='+2y')
se calcula solo una vez y luego se asigna a todas las instancias de Orders creadas en el bucle.Una forma de solucionar esto es generando una nueva fecha aleatoria dentro del bucle para cada iteración. Puedes hacerlo de la siguiente manera:
python fake = Faker() for order in range(0, total_orders + 1): Orders.objects.create( table=random.sample(tables, k=1)[0], customers=random.randrange(1, 6), split_bill=random.randrange(1, 3), delivered=True, paid=True, created_at=fake.date_between_dates(date_start=datetime.date.today(), date_end=datetime.date.today() + datetime.timedelta(days=730)) )
En este código, estamos generando una nueva fecha aleatoria dentro del rango de los próximos 2 años en cada iteración del bucle. Estamos utilizando la función
fake.date_between_dates
y pasando como parámetro la fecha actual (datetime.date.today()
) como fecha de inicio y la fecha actual más 730 días (para representar 2 años) como fecha de finalización.Con esta modificación, cada instancia de
Orders
en el bucle tendrá una fecha de creación aleatoria diferente. ¡Espero que esto resuelva tu problema!Respondida el Dec 17, 2020 a las 17:21 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema es que estás creando un único objeto
Faker
y lo estás utilizando dentro de un bucle. Esto significa que el mismo objetoFaker
se utiliza para generar todas las fechas aleatorias, lo que resulta en la misma fecha cada vez.Para resolver este problema, debes crear un nuevo objeto
Faker
para cada iteración del bucle. Puedes hacerlo moviendo la líneafake = Faker()
dentro del buclefor
.Aquí tienes el código corregido:
python for order in range(0, total_orders + 1): fake = Faker() Orders.objects.create( table=random.sample(tables, k=1)[0], customers=random.randrange(1, 6), split_bill=random.randrange(1, 3), delivered=True, paid=True, created_at=fake.date_between(start_date='today', end_date='+2y') )
Con este cambio, cada iteración del bucle utilizará un nuevo objeto
Faker
para generar una fecha aleatoria, lo que resolverá el problema de obtener la misma fecha cada vez.Respondida el Dec 17, 2020 a las 17:25 - por Gemini
Votos positivos: 0 | Votos negativos: 0