class EditKitForm(forms.Form): collection = fields.ChoiceField(label='Коллекция') caption = fields.CharField(label='Название', max_length=KitPrototype.CAPTION_MAX_LENGTH, min_length=1) description = bbcode.BBField( label='Описание', min_length=1, max_length=KitPrototype.DESCRIPTION_MAX_LENGTH) def __init__(self, *args, **kwargs): super(EditKitForm, self).__init__(*args, **kwargs) self.fields[ 'collection'].choices = collections_storage.get_form_choices() def clean_collection(self): collection_id = self.cleaned_data['collection'] collection = collections_storage[int(collection_id)] if collection is None: raise django_forms.ValidationError('Коллекция не найдена') return collection
class CompanionRecordForm(forms.Form): name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label=u'Название') max_health = fields.IntegerField(label=u'здоровье', min_value=c.COMPANIONS_MIN_HEALTH, max_value=c.COMPANIONS_MAX_HEALTH) type = fields.RelationField(label=u'тип', relation=relations.TYPE) dedication = fields.RelationField(label=u'самоотверженность', relation=relations.DEDICATION) archetype = fields.RelationField(label=u'архетип', relation=game_relations.ARCHETYPE) mode = fields.RelationField(label=u'режим появления в игре', relation=relations.MODE) abilities = abilities_forms.AbilitiesField(label=u'', required=False) description = bbcode.BBField(label=u'Описание', required=False) @classmethod def get_initials(cls, companion): return { 'description': companion.description, 'max_health': companion.max_health, 'type': companion.type, 'dedication': companion.dedication, 'archetype': companion.archetype, 'mode': companion.mode, 'abilities': companion.abilities, 'name': companion.utg_name }
class NewAchievementForm(forms.Form): approved = fields.BooleanField(label=u'Одобрена', required=False) order = fields.IntegerField() group = fields.TypedChoiceField(label=u'Группа', choices=sorted(ACHIEVEMENT_GROUP.choices(), key=lambda g: g[1]), coerce=ACHIEVEMENT_GROUP.get_from_name) type = fields.TypedChoiceField(label=u'Тип', choices=sorted(ACHIEVEMENT_TYPE.choices(), key=lambda g: g[1]), coerce=ACHIEVEMENT_TYPE.get_from_name) caption = fields.CharField(label=u'Название', max_length=AchievementPrototype.CAPTION_MAX_LENGTH, min_length=1) description = bbcode.BBField(label=u'Описание', min_length=1, max_length=AchievementPrototype.DESCRIPTION_MAX_LENGTH) barrier = fields.IntegerField(label=u'Барьер') points = fields.IntegerField(label=u'Очки') item_1 = fields.ChoiceField(label=u'награда 1', choices=[], required=False) item_2 = fields.ChoiceField(label=u'награда 2', choices=[], required=False) item_3 = fields.ChoiceField(label=u'награда 3', choices=[], required=False) def __init__(self, *args, **kwargs): super(NewAchievementForm, self).__init__(*args, **kwargs) self.fields['item_1'].choices = [('', u'-----')] + items_storage.form_choices() self.fields['item_2'].choices = [('', u'-----')] + items_storage.form_choices() self.fields['item_3'].choices = [('', u'-----')] + items_storage.form_choices() clean_item_1 = create_clean_item_method(1) clean_item_2 = create_clean_item_method(2) clean_item_3 = create_clean_item_method(3)
class BaseUserForm(forms.Form): RATIONALE_MIN_LENGTH = 250 if not project_settings.TESTS_RUNNING else 0 caption = fields.CharField(label='Название записи', max_length=Bill.CAPTION_MAX_LENGTH, min_length=Bill.CAPTION_MIN_LENGTH) rationale = bbcode.BBField(label='', min_length=RATIONALE_MIN_LENGTH) chronicle_on_accepted = fields.TextField(label='Текст летописи при принятии', widget=Textarea(attrs={'rows': 2}), min_length=bills_settings.CHRONICLE_MIN_LENGTH, max_length=bills_settings.CHRONICLE_MAX_LENGTH)
class BaseForm(BaseUserForm): place = fields.ChoiceField(label='Город') new_description = bbcode.BBField( label='Новое описание', max_length=places_conf.settings.MAX_DESCRIPTION_LENGTH) def __init__(self, *args, **kwargs): super(BaseForm, self).__init__(*args, **kwargs) self.fields['place'].choices = places_storage.places.get_choices()
class EditCollectionForm(forms.Form): caption = fields.CharField( label='Название', max_length=CollectionPrototype.CAPTION_MAX_LENGTH, min_length=1) description = bbcode.BBField( label='Описание', min_length=1, max_length=CollectionPrototype.DESCRIPTION_MAX_LENGTH)
class SettingsForm(forms.Form): personal_messages_subscription = fields.BooleanField( required=False, label='получать письма о новых личных сообщениях') news_subscription = fields.BooleanField(required=False, label='получать письма о новостях') description = bbcode.BBField( required=False, label='Несколько слов о Вас, для страницы Вашего аккаунта', max_length=conf.accounts_settings.MAX_ACCOUNT_DESCRIPTION_LENGTH)
class ClanForm(forms.Form): name = fields.CharField(label='Название', max_length=Clan.MAX_NAME_LENGTH, min_length=Clan.MIN_NAME_LENGTH) abbr = fields.CharField(label='Аббревиатура (до %d символов)' % Clan.MAX_ABBR_LENGTH, max_length=Clan.MAX_ABBR_LENGTH, min_length=Clan.MIN_ABBR_LENGTH) motto = fields.CharField(label='Девиз', max_length=Clan.MAX_MOTTO_LENGTH) description = bbcode.BBField(label='Описание', max_length=Clan.MAX_DESCRIPTION_LENGTH)
class CompanionRecordForm(forms.Form): name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label='Название') max_health = fields.IntegerField(label='здоровье', min_value=c.COMPANIONS_MIN_HEALTH, max_value=c.COMPANIONS_MAX_HEALTH) type = fields.RelationField(label='тип', relation=game_relations.BEING_TYPE) dedication = fields.RelationField(label='самоотверженность', relation=relations.DEDICATION) archetype = fields.RelationField(label='архетип', relation=game_relations.ARCHETYPE) mode = fields.RelationField(label='режим появления в игре', relation=relations.MODE) communication_verbal = fields.RelationField( label='вербальное общение', relation=game_relations.COMMUNICATION_VERBAL) communication_gestures = fields.RelationField( label='невербальное общение', relation=game_relations.COMMUNICATION_GESTURES) communication_telepathic = fields.RelationField( label='телепатия', relation=game_relations.COMMUNICATION_TELEPATHIC) intellect_level = fields.RelationField( label='уровень интеллекта', relation=game_relations.INTELLECT_LEVEL) abilities = abilities_forms.AbilitiesField(label='', required=False) description = bbcode.BBField(label='Описание', required=False) @classmethod def get_initials(cls, companion): return { 'description': companion.description, 'max_health': companion.max_health, 'type': companion.type, 'dedication': companion.dedication, 'archetype': companion.archetype, 'mode': companion.mode, 'abilities': companion.abilities, 'name': companion.utg_name, 'communication_verbal': companion.communication_verbal, 'communication_gestures': companion.communication_gestures, 'communication_telepathic': companion.communication_telepathic, 'intellect_level': companion.intellect_level }
class SettingsForm(forms.Form): personal_messages_subscription = fields.BooleanField(required=False, label='получать письма о новых личных сообщениях') news_subscription = fields.BooleanField(required=False, label='получать письма о новостях') description = bbcode.BBField(required=False, label='Несколько слов о Вас, для страницы Вашего аккаунта', max_length=conf.accounts_settings.MAX_ACCOUNT_DESCRIPTION_LENGTH) gender = fields.TypedChoiceField(required=True, label='Пол (необходим для корректного создания фраз, в которых упоминается игрок)', choices=((game_relations.GENDER.MASCULINE, game_relations.GENDER.MASCULINE.text), (game_relations.GENDER.FEMININE, game_relations.GENDER.FEMININE.text)), coerce=game_relations.GENDER.get_from_name, initial=game_relations.GENDER.MASCULINE)
class EditItemForm(forms.Form): kit = fields.ChoiceField(label='Набор') caption = fields.CharField(label='Название', max_length=ItemPrototype.CAPTION_MAX_LENGTH, min_length=1) text = bbcode.BBField(label='Текст', min_length=1) def __init__(self, *args, **kwargs): super(EditItemForm, self).__init__(*args, **kwargs) self.fields['kit'].choices = kits_storage.get_form_choices() def clean_kit(self): kit_id = self.cleaned_data['kit'] kit = kits_storage[int(kit_id)] if kit is None: raise django_forms.ValidationError('Колекция не найдена') return kit
class PostForm(forms.Form): caption = fields.CharField(label=u'Название', max_length=models.Post.CAPTION_MAX_LENGTH, min_length=models.Post.CAPTION_MIN_LENGTH) text = bbcode.BBField(label=u'Текст', min_length=conf.settings.MIN_TEXT_LENGTH) meta_objects = fields.CharField(label=u'Текст рассказывает о', required=False) def clean_meta_objects(self): data = self.cleaned_data.get('meta_objects', '') objects = [] slugs = set() for slug in data.split(): slug = slug.strip() if slug in slugs: raise ValidationError(u'Повторяющийся дентификатор: %s' % slug) slugs.add(slug) try: objects.append(meta_relations_logic.get_object_by_uid(slug)) except (meta_relations_exceptions.WrongTypeError, meta_relations_exceptions.WrongObjectError, meta_relations_exceptions.WrongUIDFormatError): raise ValidationError(u'Неверный идентификатор: %s' % slug) if len(objects) > conf.settings.IS_ABOUT_MAXIMUM: raise ValidationError( u'Слишком много связей, должно быть не более %d' % conf.settings.IS_ABOUT_MAXIMUM) return objects
class MobRecordBaseForm(forms.Form): level = fields.IntegerField(label=u'минимальный уровень') name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label=u'Название') type = fields.TypedChoiceField(label=u'тип', choices=MOB_TYPE_CHOICES, coerce=MOB_TYPE.get_from_name) archetype = fields.TypedChoiceField( label=u'тип', choices=game_relations.ARCHETYPE.choices(), coerce=game_relations.ARCHETYPE.get_from_name) global_action_probability = fields.FloatField( label= u'вероятность встретить монстра, если идёт его набег (от 0 до 1, 0 — нет набега)' ) terrains = fields.TypedMultipleChoiceField(label=u'места обитания', choices=TERRAIN.choices(), coerce=TERRAIN.get_from_name) abilities = fields.MultipleChoiceField(label=u'способности', choices=ABILITY_CHOICES) description = bbcode.BBField(label=u'Описание', required=False) def clean_abilities(self): abilities_ids = self.cleaned_data['abilities'] if HIT.get_id() not in abilities_ids: abilities_ids.append(HIT.get_id()) if not abilities_ids: raise ValidationError(u'не указаны способности монстра') for ability_id in abilities_ids: if ability_id not in ABILITY_CHOICES_DICT: raise ValidationError( u'неверный идентификатор способности монстра') return frozenset(abilities_ids) def clean_terrains(self): terrains = self.cleaned_data['terrains'] if not terrains: raise ValidationError(u'не указаны места обитания монстра') return frozenset(terrains) @classmethod def get_initials(cls, mob): return { 'description': mob.description, 'type': mob.type, 'name': mob.utg_name, 'archetype': mob.archetype, 'level': mob.level, 'global_action_probability': mob.global_action_probability, 'terrains': mob.terrains, 'abilities': mob.abilities }
class MobRecordBaseForm(forms.Form): level = fields.IntegerField(label='минимальный уровень') name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label='Название') type = fields.TypedChoiceField(label='тип', choices=MOB_TYPE_CHOICES, coerce=beings_relations.TYPE.get_from_name) archetype = fields.TypedChoiceField( label='тип', choices=game_relations.ARCHETYPE.choices(), coerce=game_relations.ARCHETYPE.get_from_name) global_action_probability = fields.FloatField( label= 'вероятность встретить монстра, если идёт его набег (от 0 до 1, 0 — нет набега)' ) terrains = fields.TypedMultipleChoiceField(label='места обитания', choices=TERRAIN.choices(), coerce=TERRAIN.get_from_name) abilities = fields.MultipleChoiceField(label='способности', choices=ABILITY_CHOICES) description = bbcode.BBField(label='Описание', required=False) is_mercenary = fields.BooleanField(label='может быть наёмником', required=False) is_eatable = fields.BooleanField(label='съедобный', required=False) communication_verbal = fields.RelationField( label='вербальное общение', relation=beings_relations.COMMUNICATION_VERBAL) communication_gestures = fields.RelationField( label='невербальное общение', relation=beings_relations.COMMUNICATION_GESTURES) communication_telepathic = fields.RelationField( label='телепатия', relation=beings_relations.COMMUNICATION_TELEPATHIC) intellect_level = fields.RelationField( label='уровень интеллекта', relation=beings_relations.INTELLECT_LEVEL) structure = fields.RelationField(label='структура', relation=beings_relations.STRUCTURE) features = fields.TypedMultipleChoiceField( label='особенности', choices=beings_relations.FEATURE.choices(), coerce=beings_relations.FEATURE.get_from_name) movement = fields.RelationField(label='способ передвижения', relation=beings_relations.MOVEMENT) body = fields.RelationField(label='телосложение', relation=beings_relations.BODY) size = fields.RelationField(label='размер', relation=beings_relations.SIZE) weapon_1 = fields.RelationField( label='оружие 1', relation=artifacts_relations.STANDARD_WEAPON) material_1 = fields.RelationField(label='материал оружия 1', relation=tt_artifacts_relations.MATERIAL) power_type_1 = fields.RelationField( label='тип силы оружия 1', relation=artifacts_relations.ARTIFACT_POWER_TYPE) weapon_2 = fields.RelationField( label='оружие 2', required=False, relation=artifacts_relations.STANDARD_WEAPON) material_2 = fields.RelationField(label='материал оружия 2', required=False, relation=tt_artifacts_relations.MATERIAL) power_type_2 = fields.RelationField( label='тип силы оружия 2', required=False, relation=artifacts_relations.ARTIFACT_POWER_TYPE) weapon_3 = fields.RelationField( label='оружие 3', required=False, relation=artifacts_relations.STANDARD_WEAPON) material_3 = fields.RelationField(label='материал оружия 3', required=False, relation=tt_artifacts_relations.MATERIAL) power_type_3 = fields.RelationField( label='тип силы оружия 3', required=False, relation=artifacts_relations.ARTIFACT_POWER_TYPE) def clean_abilities(self): abilities_ids = self.cleaned_data['abilities'] if HIT.get_id() not in abilities_ids: abilities_ids.append(HIT.get_id()) if not abilities_ids: raise ValidationError('не указаны способности монстра') for ability_id in abilities_ids: if ability_id not in ABILITY_CHOICES_DICT: raise ValidationError( 'неверный идентификатор способности монстра') return frozenset(abilities_ids) def clean_terrains(self): terrains = self.cleaned_data['terrains'] if not terrains: raise ValidationError('не указаны места обитания монстра') return frozenset(terrains) def clean_features(self): features = self.cleaned_data['features'] if not features: return frozenset() return frozenset(features) def get_weapons(self): weapons = [] if self.c.weapon_1 and self.c.material_1 and self.c.power_type_1: weapons.append( artifacts_objects.Weapon(weapon=self.c.weapon_1, material=self.c.material_1, power_type=self.c.power_type_1)) if self.c.weapon_2 and self.c.material_2 and self.c.power_type_2: weapons.append( artifacts_objects.Weapon(weapon=self.c.weapon_2, material=self.c.material_2, power_type=self.c.power_type_2)) if self.c.weapon_3 and self.c.material_3 and self.c.power_type_3: weapons.append( artifacts_objects.Weapon(weapon=self.c.weapon_3, material=self.c.material_3, power_type=self.c.power_type_3)) return weapons @classmethod def get_initials(cls, mob): initials = { 'description': mob.description, 'type': mob.type, 'name': mob.utg_name, 'archetype': mob.archetype, 'level': mob.level, 'global_action_probability': mob.global_action_probability, 'terrains': mob.terrains, 'abilities': mob.abilities, 'communication_verbal': mob.communication_verbal, 'communication_gestures': mob.communication_gestures, 'communication_telepathic': mob.communication_telepathic, 'intellect_level': mob.intellect_level, 'structure': mob.structure, 'features': list(mob.features), 'movement': mob.movement, 'body': mob.body, 'size': mob.size, 'is_mercenary': mob.is_mercenary, 'is_eatable': mob.is_eatable } for i, weapon in enumerate(mob.weapons, start=1): initials['weapon_{}'.format(i)] = weapon.type initials['material_{}'.format(i)] = weapon.material initials['power_type_{}'.format(i)] = weapon.power_type return initials
class CompanionRecordForm(forms.Form): name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label='Название') max_health = fields.IntegerField(label='здоровье', min_value=c.COMPANIONS_MIN_HEALTH, max_value=c.COMPANIONS_MAX_HEALTH) type = fields.RelationField(label='тип', relation=beings_relations.TYPE) dedication = fields.RelationField(label='самоотверженность', relation=relations.DEDICATION) archetype = fields.RelationField(label='архетип', relation=game_relations.ARCHETYPE) mode = fields.RelationField(label='режим появления в игре', relation=relations.MODE) communication_verbal = fields.RelationField( label='вербальное общение', relation=beings_relations.COMMUNICATION_VERBAL) communication_gestures = fields.RelationField( label='невербальное общение', relation=beings_relations.COMMUNICATION_GESTURES) communication_telepathic = fields.RelationField( label='телепатия', relation=beings_relations.COMMUNICATION_TELEPATHIC) intellect_level = fields.RelationField( label='уровень интеллекта', relation=beings_relations.INTELLECT_LEVEL) abilities = abilities_forms.AbilitiesField(label='', required=False) structure = fields.RelationField(label='структура', relation=beings_relations.STRUCTURE) features = fields.TypedMultipleChoiceField( label='особенности', choices=beings_relations.FEATURE.choices(), coerce=beings_relations.FEATURE.get_from_name) movement = fields.RelationField(label='способ передвижения', relation=beings_relations.MOVEMENT) body = fields.RelationField(label='телосложение', relation=beings_relations.BODY) size = fields.RelationField(label='размер', relation=beings_relations.SIZE) weapon_1 = fields.RelationField( label='оружие 1', relation=artifacts_relations.STANDARD_WEAPON) material_1 = fields.RelationField(label='материал оружия 1', relation=tt_artifacts_relations.MATERIAL) power_type_1 = fields.RelationField( label='тип силы оружия 1', relation=artifacts_relations.ARTIFACT_POWER_TYPE) weapon_2 = fields.RelationField( label='оружие 2', required=False, relation=artifacts_relations.STANDARD_WEAPON) material_2 = fields.RelationField(label='материал оружия 2', required=False, relation=tt_artifacts_relations.MATERIAL) power_type_2 = fields.RelationField( label='тип силы оружия 2', required=False, relation=artifacts_relations.ARTIFACT_POWER_TYPE) weapon_3 = fields.RelationField( label='оружие 3', required=False, relation=artifacts_relations.STANDARD_WEAPON) material_3 = fields.RelationField(label='материал оружия 3', required=False, relation=tt_artifacts_relations.MATERIAL) power_type_3 = fields.RelationField( label='тип силы оружия 3', required=False, relation=artifacts_relations.ARTIFACT_POWER_TYPE) description = bbcode.BBField(label='Описание', required=False) def clean_features(self): features = self.cleaned_data['features'] if not features: return frozenset() return frozenset(features) def get_weapons(self): weapons = [] if self.c.weapon_1 and self.c.material_1 and self.c.power_type_1: weapons.append( artifacts_objects.Weapon(weapon=self.c.weapon_1, material=self.c.material_1, power_type=self.c.power_type_1)) if self.c.weapon_2 and self.c.material_2 and self.c.power_type_2: weapons.append( artifacts_objects.Weapon(weapon=self.c.weapon_2, material=self.c.material_2, power_type=self.c.power_type_2)) if self.c.weapon_3 and self.c.material_3 and self.c.power_type_3: weapons.append( artifacts_objects.Weapon(weapon=self.c.weapon_3, material=self.c.material_3, power_type=self.c.power_type_3)) return weapons @classmethod def get_initials(cls, companion): initials = { 'description': companion.description, 'max_health': companion.max_health, 'type': companion.type, 'dedication': companion.dedication, 'archetype': companion.archetype, 'mode': companion.mode, 'abilities': companion.abilities, 'name': companion.utg_name, 'communication_verbal': companion.communication_verbal, 'communication_gestures': companion.communication_gestures, 'communication_telepathic': companion.communication_telepathic, 'intellect_level': companion.intellect_level, 'structure': companion.structure, 'features': list(companion.features), 'movement': companion.movement, 'body': companion.body, 'size': companion.size } for i, weapon in enumerate(companion.weapons, start=1): initials['weapon_{}'.format(i)] = weapon.type initials['material_{}'.format(i)] = weapon.material initials['power_type_{}'.format(i)] = weapon.power_type return initials
class MobRecordBaseForm(forms.Form): level = fields.IntegerField(label='минимальный уровень') name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label='Название') type = fields.TypedChoiceField( label='тип', choices=MOB_TYPE_CHOICES, coerce=game_relations.BEING_TYPE.get_from_name) archetype = fields.TypedChoiceField( label='тип', choices=game_relations.ARCHETYPE.choices(), coerce=game_relations.ARCHETYPE.get_from_name) global_action_probability = fields.FloatField( label= 'вероятность встретить монстра, если идёт его набег (от 0 до 1, 0 — нет набега)' ) terrains = fields.TypedMultipleChoiceField(label='места обитания', choices=TERRAIN.choices(), coerce=TERRAIN.get_from_name) abilities = fields.MultipleChoiceField(label='способности', choices=ABILITY_CHOICES) description = bbcode.BBField(label='Описание', required=False) is_mercenary = fields.BooleanField(label='может быть наёмником', required=False) is_eatable = fields.BooleanField(label='съедобный', required=False) communication_verbal = fields.RelationField( label='вербальное общение', relation=game_relations.COMMUNICATION_VERBAL) communication_gestures = fields.RelationField( label='невербальное общение', relation=game_relations.COMMUNICATION_GESTURES) communication_telepathic = fields.RelationField( label='телепатия', relation=game_relations.COMMUNICATION_TELEPATHIC) intellect_level = fields.RelationField( label='уровень интеллекта', relation=game_relations.INTELLECT_LEVEL) def clean_abilities(self): abilities_ids = self.cleaned_data['abilities'] if HIT.get_id() not in abilities_ids: abilities_ids.append(HIT.get_id()) if not abilities_ids: raise ValidationError('не указаны способности монстра') for ability_id in abilities_ids: if ability_id not in ABILITY_CHOICES_DICT: raise ValidationError( 'неверный идентификатор способности монстра') return frozenset(abilities_ids) def clean_terrains(self): terrains = self.cleaned_data['terrains'] if not terrains: raise ValidationError('не указаны места обитания монстра') return frozenset(terrains) @classmethod def get_initials(cls, mob): return { 'description': mob.description, 'type': mob.type, 'name': mob.utg_name, 'archetype': mob.archetype, 'level': mob.level, 'global_action_probability': mob.global_action_probability, 'terrains': mob.terrains, 'abilities': mob.abilities, 'communication_verbal': mob.communication_verbal, 'communication_gestures': mob.communication_gestures, 'communication_telepathic': mob.communication_telepathic, 'intellect_level': mob.intellect_level, 'is_mercenary': mob.is_mercenary, 'is_eatable': mob.is_eatable }
class NewMessageForm(RecipientsForm): text = bbcode.BBField(label=u'Сообщение')
class RequestForm(forms.Form): text = bbcode.BBField(label='Сообщение', initial=DEFAULT_TEXT)
class NewPostForm(forms.Form): text = bbcode.BBField(label=u'Сообщение', min_length=1)
class ArtifactRecordBaseForm(forms.Form): level = fields.IntegerField(label=u'минимальный уровень') name = WordField(word_type=utg_relations.WORD_TYPE.NOUN, label=u'Название') description = bbcode.BBField(label=u'Описание', required=False) type = fields.TypedChoiceField( label=u'тип', choices=relations.ARTIFACT_TYPE.choices(), coerce=relations.ARTIFACT_TYPE.get_from_name) power_type = fields.TypedChoiceField( label=u'тип силы', choices=relations.ARTIFACT_POWER_TYPE.choices(), coerce=relations.ARTIFACT_POWER_TYPE.get_from_name) rare_effect = fields.TypedChoiceField( label=u'редкий эффект', choices=EFFECT_CHOICES, coerce=relations.ARTIFACT_EFFECT.get_from_name) epic_effect = fields.TypedChoiceField( label=u'эпический эффект', choices=EFFECT_CHOICES, coerce=relations.ARTIFACT_EFFECT.get_from_name) special_effect = fields.TypedChoiceField( label=u'особое свойство', choices=EFFECT_CHOICES, coerce=relations.ARTIFACT_EFFECT.get_from_name) mob = fields.ChoiceField(label=u'Монстр', required=False) def __init__(self, *args, **kwargs): super(ArtifactRecordBaseForm, self).__init__(*args, **kwargs) self.fields['mob'].choices = [('', u'-------')] + [ (mob.id, mob.name) for mob in sorted(mobs_storage.all(), key=lambda mob: mob.name) ] def clean_mob(self): mob = self.cleaned_data.get('mob') if mob: return mobs_storage[int(mob)] return None @classmethod def get_initials(cls, artifact): return { 'level': artifact.level, 'name': artifact.utg_name, 'type': artifact.type, 'power_type': artifact.power_type, 'rare_effect': artifact.rare_effect, 'epic_effect': artifact.epic_effect, 'special_effect': artifact.special_effect, 'description': artifact.description, 'mob': artifact.mob.id if artifact.mob is not None else None }
class MembershipRequestForm(forms.Form): text = bbcode.BBField(label='Текст', max_length=MembershipRequest.MAX_TEXT_LENGTH)