Django: как использовать точность с плавающей точкой вместо двойной точности в MySQL - PullRequest
3 голосов
/ 01 декабря 2010

<a href="http://docs.djangoproject.com/en/1.2/ref/models/fields/#floatfield" rel="nofollow noreferrer">models.FloatField</a> создает двойник в MySQL.
Возможно ли и как создать поле точности с плавающей точкой вместо двойной точности?

Обоснование аналогично обоснованию SmallIntegerField.

Ответы [ 2 ]

3 голосов
/ 15 августа 2013

Ну, есть лучший способ, и гораздо более простой. Я также хотел то же самое с моим db, когда натолкнулся на следующий метод db_type () в django.

Во-первых, вам нужно создать собственное поле в django, унаследовав класс поля

class customFloatField(models.Field): 
    def db_type(self,connection):
        return 'float'

тогда вы можете использовать это как любое другое поле модели в вашем классе моделей

number = customFloatField(null=True,blank=True)

Я пытался, и это работает для меня в MySQL. Чтобы изменить его в соответствии с типом соединения, вам нужно будет проверить настройку соединения в операторе if и изменить соответствующим образом.

Подробнее об этом упоминается в https://docs.djangoproject.com/en/dev/howto/custom-model-fields/

2 голосов
/ 01 декабря 2010

Есть несколько вариантов сделать это, но я не понимаю, почему вы захотите.

  1. Измените его в базе данных, не будет работать при воссоздании таблиц, но Django не будет выполнять приведение вручную, поэтому, если база данных изменится, измените и результаты.
  2. Создайте пользовательский тип поля (то есть наследуйте FloatField и измените get_internal_type(), чтобы он возвращал что-то вроде SinglePrecisionFloatField. После этого вам также нужно будет создать свою собственную базу данных и добавить свой пользовательский тип в creation.DatabaseCreation.data_types (источник : http://code.djangoproject.com/browser/django/trunk/django/db/backends/mysql/creation.py)
  3. Измените каждый FloatField с одинарной точностью. Как и выше, вам нужно будет создать свою собственную базу данных и / или изменить реализацию FloatField в текущей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...