Django о том, где хранить переменные уровня модели
Итак, у меня есть моя модель:
from django.db import models
x_default_coordinate = 0
y_default_coordinate = 0
class Model(models.Model):
location1 = gis_models.PointField(
srid=4326, default=Point(x_default_coordinate, y_default_coordinate)
)
location2 = gis_models.PointField(
srid=4326, default=Point(x_default_coordinate, y_default_coordinate)
)
Где можно хранить координаты по умолчанию? Сейчас они у меня как на рисунке, но это кажется неправильным.
Вы можете сохранить их в своем классе и сделать что-то вроде этого:
class YourModel(models.Model):
X_DEFAULT_COORDINATE = 0
Y_DEFAULT_COORDINATE = 0
# your codes.
---
Я предполагаю, что имя вашей модели не Model
, как вы представили. Если это так, возможно, вы можете использовать уникальное и осмысленное имя, чтобы избежать путаницы с Model
Я не знаком с объектом Point
и пакетом, который вы используете, поэтому отвечу на ваш вопрос , предполагая, что Point
- это изменяемый объект.
По умолчанию не может быть мутабельным объектом (экземпляр модели, список, набор и т. д.), поскольку ссылка на один и тот же экземпляр этого объекта будет использоваться в качестве значения по умолчанию во всех новых экземплярах модели. Вместо этого оберните нужное значение по умолчанию в вызываемый объект.
Чтобы избежать случайного мутирования объекта по умолчанию, следует обернуть его в вызываемый объект:
DEFAULT_X = 0
DEFAULT_Y = 0
def get_origin_point():
return Point(DEFAULT_X, DEFAULT_Y)
Тогда в MyModel
:
class MyModel(models.Model):
location1 = gis_models.PointField(srid=4326, default=get_default_point)
....