Passing date time in a different format to models.DateTimeField in Django?
我有一个看起来像这样的模型
1 2 3 4 5 | class Post(models.Model): id = models.IntegerField(unique=True, primary_key=True) title = models.CharField(max_length=150, blank=True) created = models.DateTimeField(blank=True) ... |
我必须用大块数据填充数据库。 我以平坦的json字符串形式获取数据(没有嵌套)所以我的工作非常简单,即
1 2 3 | mydict = json.loads(jsonstr) mypost = Post(**mydict) mypost.save() |
只有一个问题是日期时间以"YYYY-MM-DDThh:mm:ss + zzzz"格式(例如
我知道
子类DateTimeField并适当地转换值:
1 2 3 4 | class ConvertingDateTimeField(models.DateTimeField): def get_prep_value(self, value): return str(datetime.strptime(value, FORMAT_STRING)) |
然后使用ConvertingDateTimeField替换models.DateTimeField。
如果你看看DateTimeField如何创建datetime对象,可能有更好的方法。
您可以使用ModelForm并覆盖
像这样的东西:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from django.forms import ModelForm class PostForm(ModelForm): created = forms.DateTimeField(input_formats=('%Y-%m-%dT%H:%M:%S+0000',)) class Meta: model = Post mydict = ... form = PostForm(mydict) if not form.is_valid(): # handle appropriately for your app raise Exception instance = form.save() # or use 'commit=False' if you don't want to save to DB |
不幸的是,我不认为
我相信DateTimeField需要一个时区天真的日期时间,所以你需要剥离(+ zzzz)部分。
1 | naive = dt.replace(tzinfo=None) |
仅适用于Python 2.x.
好的,这就是我最后做的事情:
1 2 3 4 5 6 7 | class MyDateTimeFeild(models.DateTimeField): def get_prep_value(self, value): from dateutil.parser import parse from datetime import timedelta td = float(value[-5:])/100 timediff = timedelta(hours=td) return parse(value).replace(tzinfo=None) - timediff |
感谢大家!! :)所有帖子都非常有帮助。