У меня есть переменная вне класса. Переменная необходима для правильного функционирования класса. Как переместить его внутри класса и использовать в другом классе?
Это работает хорошо, но мне нужно переместить STATUS_CHOICES
внутрь класса UserDevice
и использовать STATUS_CHOICES
внутри UserDeviceAdmin
.
STATUS_CHOICES = ((0, gettext("disabled")), (1, gettext("allowed")))
class UserDevice(BaseModel):
"""Table with all devices added and owned by users."""
device_uniqueid = CharField(primary_key=True)
device_user = ForeignKeyField(User, null=True, backref='userdevices')
device_name = CharField()
model = CharField()
phone = CharField()
status = IntegerField(choices=STATUS_CHOICES, default=1)
inserted_at = DateTimeField(null=True)
def myfunc(self):
return self.a
class UserDeviceAdmin(ModelView):
can_create = False
edit_modal = True
column_choices = {'status': STATUS_CHOICES}
column_list = [
'device_uniqueid',
'device_user.email',
'device_name',
'model',
'phone',
'status',
'inserted_at',
]
column_sortable_list = ('device_uniqueid', 'device_user.email')
form_ajax_refs = {'device_user': {'fields': ['email']}}
Я могу попытаться придумать что-то для вашего конкретного случая, но я думаю, что ваш ответ можно найти [здесь] (stackoverflow.com/questions/11421659/…). Хотя это немного сложно читать.
Это детское определение модели ORM. Я думаю, что лучше иметь STATUS_CHOICES
внутри UserDevice
, потому что STATUS_CHOICES
используется только в модели UserDevice`.
Переместите его внутрь:
class UserDevice(BaseModel):
"""Table with all devices added and owned by users."""
STATUS_CHOICES = ((0, gettext("disabled")), (1, gettext("allowed")))
Доступ к нему из другого класса:
class UserDeviceAdmin(ModelView):
can_create = False
edit_modal = True
column_choices = {'status': UserDevice.STATUS_CHOICES}
Это как статические переменные.
Это определение модели ORM peewee и определение представления flask-admin. Ваше решение лучше для меня, потому что STATUS_CHOICES
используется для UserDevice
модели. Большое спасибо.
Вам следует рассмотреть возможность использования родительского класса, от которого вы можете наследоваться, благодаря множественному наследованию это легко сделать в python:
class Parent_class(object):
def get_status_choices(self):
return ((0, gettext("disabled")), (1, gettext("allowed")))
class UserDevice(BaseModel, Parent_class):
# your implementation...
status = IntegerField(choices=self.get_status_choices(), default=1)
# and further implementations....
class UserDeviceAdmin(ModelView, Parent_class):
# your implementation...
column_choices = {'status': self.get_status_choices()}
# and further implementations....
Обратите внимание, вам лучше изменить имя родительского класса на что-то соответствующее в вашем домене.
Большое спасибо, но я думаю, что решение @DroidX86 для меня лучше. Но спасибо, что научил меня.
Почему вы нужно перемещаете
STATUS_CHOICES
вUserDevice
?