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

в Django.

Я не знаком с объектом Point и пакетом, который вы используете, поэтому отвечу на ваш вопрос , предполагая, что Point - это изменяемый объект.

Документы для Field.default:

По умолчанию не может быть мутабельным объектом (экземпляр модели, список, набор и т. д.), поскольку ссылка на один и тот же экземпляр этого объекта будет использоваться в качестве значения по умолчанию во всех новых экземплярах модели. Вместо этого оберните нужное значение по умолчанию в вызываемый объект.

Чтобы избежать случайного мутирования объекта по умолчанию, следует обернуть его в вызываемый объект:

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)
    ....
Вернуться на верх