2016-05-16 79 views
0

我有以下的Django模型Django的ORM不空列返回無

class CalculatedResults(models.Model): 
id = models.IntegerField(primary_key=True) 
tmstamp = models.DateTimeField() 
latitude = models.FloatField() 
longitude = models.FloatField() 
magnitude = models.FloatField() 
origin_time = models.DateTimeField() 
actioncode = models.IntegerField(db_column='actionCode', blank=True, null=True) # Field name made lowercase. 
class Meta: 
    managed = False 
    db_table = 'calculated_results' 
    verbose_name = 'Calculated Result' 
    verbose_name_plural = 'Calculated Results' 

和相關MySQL表爲:

CREATE TABLE IF NOT EXISTS `calculated_results` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `tmstamp` timestamp(5) NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `latitude` double NOT NULL, 
    `longitude` double NOT NULL, 
    `magnitude` double NOT NULL DEFAULT '0', 
    `origin_time` timestamp(5) NOT NULL DEFAULT '0000-00-00 00:00:00.00000', 
    `actionCode` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `tmstamp_index` (`tmstamp`), 
    KEY `origin_time_index` (`origin_time`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=814 ; 

當我嘗試檢索使用python manage.py shell使用下面的代碼從表中數據,

form eew_main.models import CalculatedResults 
a = CalculatedResults.objects.all().order_by('-id')[:1] 

我得到Nonetmstamporigin_time但據我調查了這個問題,當我嘗試它與Django使用我得到了所有的值相同的mysql用戶mysql的下面的SQL查詢發送到MySQL

SELECT `calculated_results`.`id` , `calculated_results`.`tmstamp` , `calculated_results`.`latitude` , `calculated_results`.`longitude` , `calculated_results`.`magnitude` , `calculated_results`.`origin_time` , `calculated_results`.`actionCode` 
FROM `calculated_results` 
ORDER BY `calculated_results`.`id` DESC 
LIMIT 1 

所以請幫助我以某種方式找到一種方法來調查和解決這個問題。

謝謝!

+1

它是否爲所有日期返回'None',或僅爲零日期''0000-00-00 00:00:00.00000''返回? – Alasdair

+0

@Alasdair它爲所有值返回null,而不僅僅是零日期 – abyz

+0

@abyz爲什麼此模型的管理狀態爲false?它禁止django爲此表創建遷移 [在模型中管理](https://docs.djangoproject.com/en/1.10/ref/models/options/) – shalbafzadeh

回答

1

似乎你的表格是在Django之外創建的。 Django的models.DateTimeField將在MySQL中合成爲datetime字段,而不是timestamp

檢查this answer爲類似DateTimeField的實現,在SQL級採用timestamp

+0

感謝您的幫助,但日期是由其他人生成的,只是由django閱讀。在生產服務器中它發生,但在開發服務器中沒有任何問題 – abyz