I need to save some fields in my database in the format YYY-MM-MM 00:00:00+00.
So I decide to do this:
# setting.py
TIME_ZONE = 'America/Mexico_City'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# models.py
class Program(models.Model):
objects = models.Manager()
objects_custom = ProgramManager()
class Meta:
ordering = ['id']
name = models.CharField(max_length=100, null=False)
program_budget = models.CharField(max_length=100, null=False)
company = models.ForeignKey(Company, on_delete=models.CASCADE, null=True)
active = models.BooleanField(default=True)
uuid4 = models.CharField(max_length=50, unique=True, null=True)
country_list = models.TextField(null=True)
method_payment = models.CharField(max_length=100, null=True)
currency = models.CharField(max_length=4, default='USD', null=True)
create_at = models.DateTimeField(auto_now_add=True, null=True)
discharge_program = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now=True)
deleted_at = models.DateTimeField(null=True)
is_saved = models.NullBooleanField(default=False, null=True, blank=True)
is_suspended = models.BooleanField(default=False)
start_at = models.DateTimeField(null=True)
finish_at = models.DateTimeField(null=True)
# utils.py
from datetime import datetime, time
import pytz
from settings.py import TIME_ZONE
def get_start_at(date):
"""Obtain the current day initialize in the first second of the day.
Parameters:
date (date): date object
Returns:
(datetime): YYYY-MM-DD 00:00:00
"""
return datetime.combine(date, time.min, pytz.timezone(TIME_ZONE))
Here are my values to create the register:
{
'has_individual_budget': False,
'name': 'plan test create program start_at datetime',
'program_budget': '0',
'uuid4', 'd6effacf-3c19-48db-ab06-5af1d97df599',
'country_list':
'[{"id":239,"name":"Venezuela","iso_code2":"VE","iso_code3":"VEN","phone_prefix":58,"currency":"VEF","flag":"U+1F1FB
U+1F1EA","phone_national_regex":"^[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}$","active":1}]',
'method_payment': '7fb39a7e-a6de-488b-9564-9bd853b598ec',
'currency': 'USD',
'is_saved': False,
'start_at': datetime.datetime(2022, 3, 28, 0, 0, tzinfo=<DstTzInfo
'America/Mexico_City' LMT-1 day, 17:23:00 STD>),
'finish_at': datetime.datetime(2022, 4, 27, 23, 59, 59, 999999,
tzinfo=<DstTzInfo 'America/Mexico_City' LMT-1 day, 17:23:00 STD>),
'company': <Company: Company object (247)>,
'card_provider': <CardProvider: stripe-usa>,
'payment_provider': <CardProvider: stripe-usa>
}
as you can see the field 'start_at' is the datetime that I want to store in
the database, but when I look the insert query:
{
'sql': """
INSERT INTO "user_program"
(
"name",
"program_budget",
"company_id",
"active",
"uuid4",
"country_list",
"method_payment",
"currency",
"create_at",
"discharge_program",
"updated_at",
"deleted_at",
"is_saved",
"is_suspended",
"start_at",
"finish_at",
"has_individual_budget",
"card_provider_id",
"payment_provider_id"
)
VALUES
(
\'plan test create program start_at datetime\',
\'0\',
247,
true,
\'d6effacf-3c19-48db-ab06-5af1d97df599\',
\'[{"id":239,"name":"Venezuela","iso_code2":"VE","iso_code3":"VEN","phone_prefix":58,"currency":"VEF","flag":"U+1F1FB
U+1F1EA","phone_national_regex":"^[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}$","active":1}]\',
\'7fb39a7e-a6de-488b-9564-9bd853b598ec\',
\'USD\',
\'2022-03-28T18:47:10.865801+00:00\'::timestamptz,
\'2022-03-28T18:47:10.865870+00:00\'::timestamptz,
\'2022-03-28T18:47:10.865913+00:00\'::timestamptz,
NULL,
false,
false,
\'2022-03-28T00:00:00-06:37\'::timestamptz, -- start_field, notice that the
timezone part should be -06 but it is -06:37
\'2022-04-27T23:59:59.999999-06:37\'::timestamptz,
false,
1,
1
)
RETURNING "user_program"."id"',
'time': '0.267'
}
Plase tell me how to fix that, if I need to change the TIME_ZONE or something.
Regards, Andres.
El martes, 29 de marzo de 2022 a la(s) 01:41:42 UTC-4, Antonis Christofides
escribió:
Hello,
1. Please copy your code exactly. Is it really
"pytz.timezone(TIME_ZONE)"? Or is it
"pytz.timezone(*settings.*TIME_ZONE)"? If it is the first one, please
include the definition or importing of TIME_ZONE.
2. Please pretty-print your dictionary. You can use pprint for that. If
it doesn't work on OrderedDicts, convert it to a simple dictionary
before pretty printing.
3. Likewise, do something so that your SQL statement is more readable,
such as manually inserting newlines and indents.
Regards,
Antonis
Antonis Christofides
+30-6979924665 <tel:+30%20697%20992%204665> (mobile)
On 28/03/2022 22.02, Andrés Alvarez wrote:
I need to save some fields in my database in the format YYY-MM-MM
00:00:00+00. So I decide to do this:
field_to_save = datetime.combine(date_to_save, time.min,
pytz.timezone(TIME_ZONE))
in settings.py I have:
TIME_ZONE = 'America/Mexico_City'
USE_I18N = True
USE_L10N = True
USE_TZ = True
My model:
class Program(models.Model):
objects = models.Manager()
objects_custom = ProgramManager()
class Meta:
ordering = ['id']
# ... others fields
start_at = models.DateTimeField(null=True)
finish_at = models.DateTimeField(null=True)
Here are my values to create the register:
OrderedDict([('has_individual_budget', False), ('name', 'plan test create
program start_at datetime'), ('program_budget', '0'), ('uuid4',
'd6effacf-3c19-48db-ab06-5af1d97df599'), ('country_list',
'[{"id":239,"name":"Venezuela","iso_code2":"VE","iso_code3":"VEN","phone_prefix":58,"currency":"VEF","flag":"U+1F1FB
U+1F1EA","phone_national_regex":"^[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}$","active":1}]'),
('method_payment', '7fb39a7e-a6de-488b-9564-9bd853b598ec'), ('currency',
'USD'), ('is_saved', False), ('start_at', datetime.datetime(2022, 3, 28,
0, 0, tzinfo=<DstTzInfo 'America/Mexico_City' LMT-1 day, 17:23:00 STD>)),
('finish_at', datetime.datetime(2022, 4, 27, 23, 59, 59, 999999,
tzinfo=<DstTzInfo 'America/Mexico_City' LMT-1 day, 17:23:00 STD>)),
('company', <Company: Company object (247)>), ('card_provider',
<CardProvider: stripe-usa>), ('payment_provider', <CardProvider:
stripe-usa>)])
as you can see the field 'start_at' is the datetime that I want to store
in the database, but when I look the insert query:
{'sql': 'INSERT INTO "user_program" ("name", "program_budget",
"company_id", "active", "uuid4", "country_list", "method_payment",
"currency", "create_at", "discharge_program", "updated_at", "deleted_at",
"is_saved", "is_suspended", "start_at", "finish_at",
"has_individual_budget", "card_provider_id", "payment_provider_id")
VALUES (\'plan test create program start_at datetime\', \'0\', 247, true,
\'d6effacf-3c19-48db-ab06-5af1d97df599\',
\'[{"id":239,"name":"Venezuela","iso_code2":"VE","iso_code3":"VEN","phone_prefix":58,"currency":"VEF","flag":"U+1F1FB
U+1F1EA","phone_national_regex":"^[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}$","active":1}]\',
\'7fb39a7e-a6de-488b-9564-9bd853b598ec\', \'USD\',
\'2022-03-28T18:47:10.865801+00:00\'::timestamptz,
\'2022-03-28T18:47:10.865870+00:00\'::timestamptz,
\'2022-03-28T18:47:10.865913+00:00\'::timestamptz, NULL, false, false,
\'2022-03-28T00:00:00-06:37\'::timestamptz,
\'2022-04-27T23:59:59.999999-06:37\'::timestamptz, false, 1, 1) RETURNING
"user_program"."id"', 'time': '0.267'}
the timezone part is -06:37 should be only -06.
Plase tell me how to fix that, if I need to change the TIME_ZONE or
something.
Regards, Andres.
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/1999ec1e-9170-432e-adc0-71cab3dece6an%40googlegroups.com
<https://groups.google.com/d/msgid/django-users/1999ec1e-9170-432e-adc0-71cab3dece6an%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/d1cfcde9-3d21-4918-8edf-b9366b1dfa33n%40googlegroups.com
<https://groups.google.com/d/msgid/django-users/d1cfcde9-3d21-4918-8edf-b9366b1dfa33n%40googlegroups.com?utm_medium=email&utm_source=footer>.