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 django-users...@googlegroups.com.
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 django-users+unsubscr...@googlegroups.com.
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>.