Example #1
0
class PostProjectForm(PostForm):
    title = forms.CharField(
        label="Название проекта",
        required=True,
        max_length=128,
        widget=forms.TextInput(attrs={"placeholder": "Название проекта 🏗"}),
    )
    url = forms.URLField(
        label="Ссылка на страницу проекта 👇",
        required=True,
        widget=forms.TextInput(attrs={"placeholder": "https://"}),
    )
    image = ImageUploadField(
        label="Скриншот или иконка",
        required=True,
        resize=(1024, 1024),
    )
    text = forms.CharField(
        label="Описание",
        required=True,
        min_length=1500,
        initial="🤗 Расскажите нам все инсайды о вашем проекте.\n\n "
        "Ниже мы накидали список популярных вопросов, на которые обычно всем интересно услышать ответы. "
        "Он здесь для того, чтобы помочь вам с проблемой чистого листа и задать базовую структуру. "
        "Не нужно понимать его буквально. Главное — чтобы другим было полезно читать ваш опыт.\n\n"
        "### Расскажите о себе и сути проекта?\n\n\n\n"
        "### Как появилась идея? Что вдохновило?\n\n\n\n"
        "### Что вошло в прототип и сколько времени на него было потрачено?\n\n\n\n"
        "### Какой технологический стек вы использовали? Почему?\n\n\n\n"
        "### Как вы запускались и искали первых пользователей?\n\n\n\n"
        "### С какими самыми неожиданными трудностями пришлось столкнуться?\n\n\n\n"
        "### Сколько потратили и заработали? Есть идеи как это можно монетизировать?\n\n\n\n"
        "### Какие планы на будущее?\n\n\n\n"
        "### Нужны ли какие-то советы или помощь Клуба?\n\n\n\n"
        "### Какой совет вы бы сами могли дать идущим по вашим стопам?\n\n",
        max_length=500000,
        widget=forms.Textarea(
            attrs={
                "maxlength":
                500000,
                "minlength":
                1500,
                "class":
                "markdown-editor-full",
                "placeholder":
                "Расскажите подробности о вашем проекте!"
                "\n- В чем его суть и как он помогает людям?"
                "\n- Как появилась идея?"
                "\n- Какой технический стек вы использовали?"
                "\n- С какими самыми неожиданными трудностями вы столкнулись?"
                "\n- Сколько в итоге потратили и заработали?"
                "\n- Нужны ли какие-то советы или помошь Клуба?"
            }),
    )

    class Meta:
        model = Post
        fields = [
            "title", "text", "topic", "url", "image", "is_visible", "is_public"
        ]
Example #2
0
class UserAdminForm(forms.Form):
    add_hat = forms.BooleanField(label="Выдать новую шапку", required=False)
    new_hat = forms.ChoiceField(
        label="Выбрать из популярных",
        choices=[(None, "---")] + [(key, value.get("title")) for key, value in HATS.items()],
        required=False,
    )
    new_hat_name = forms.CharField(
        label="Создать новый титул",
        max_length=48,
        required=False
    )
    new_hat_icon = ImageUploadField(
        label="Иконка",
        required=False,
        resize=(256, 256),
    )
    new_hat_color = forms.CharField(
        label="Цвет",
        initial="#000000",
        max_length=16,
        required=False
    )
    remove_hat = forms.BooleanField(
        label="Удалить текущую шапку",
        required=False
    )

    new_achievement = forms.ChoiceField(
        label="Выдать новую ачивку",
        choices=[(None, "---")] + [(key, value.get("name")) for key, value in ACHIEVEMENTS],
        required=False,
    )

    is_banned = forms.BooleanField(
        label="Забанить",
        required=False
    )
    ban_days = forms.IntegerField(
        label="Бан истечет через N дней",
        initial=5,
        required=False
    )
    ban_reason = forms.CharField(
        label="Причина бана",
        max_length=128,
        required=False
    )

    is_unbanned = forms.BooleanField(
        label="Разбанить",
        required=False
    )

    is_rejected = forms.BooleanField(
        label="Размодерирвать",
        required=False
    )
Example #3
0
class ProfileEditForm(ModelForm):
    full_name = forms.CharField(
        label="Имя и фамилия",
        required=True,
        max_length=128
    )
    avatar = ImageUploadField(
        label="Аватар",
        required=False,
        resize=(512, 512),
        convert_to="jpg",
    )
    city = forms.CharField(
        label="город",
        required=True,
        max_length=120
    )
    country = forms.ChoiceField(
        label="Страна",
        choices=COUNTRIES,
        required=True
    )
    bio = forms.CharField(
        label="Ссылочки на себя и всякое такое",
        required=False,
        max_length=1024,
        widget=forms.Textarea(attrs={"maxlength": 1024}),
    )
    company = forms.CharField(
        label="Компания",
        required=True,
        max_length=128
    )
    position = forms.CharField(
        label="Должность или что вы делаете",
        required=True,
        max_length=128
    )
    contact = forms.CharField(
        label="Контакт для связи",
        required=True,
        max_length=256,
    )

    class Meta:
        model = User
        fields = [
            "full_name",
            "avatar",
            "company",
            "position",
            "city",
            "country",
            "bio",
            "contact",
        ]
Example #4
0
class UserAdminForm(forms.Form):
    role_action = forms.ChoiceField(
        label="Выбрать действие",
        choices=[(None, "---"), ("add", "Добавить роль"),
                 ("delete", "Удалить роль")],
        required=False,
    )

    role = forms.ChoiceField(
        label="Выбрать роль",
        choices=[(None, "---")] + User.ROLES,
        required=False,
    )

    add_hat = forms.BooleanField(label="Выдать новую шапку", required=False)

    new_hat = forms.ChoiceField(
        label="Выбрать из популярных",
        choices=[(None, "---")] + [(key, value.get("title"))
                                   for key, value in HATS.items()],
        required=False,
    )

    new_hat_name = forms.CharField(label="Создать новый титул",
                                   max_length=48,
                                   required=False)

    new_hat_icon = ImageUploadField(
        label="Иконка",
        required=False,
        resize=(256, 256),
    )

    new_hat_color = forms.CharField(label="Цвет",
                                    initial="#000000",
                                    max_length=16,
                                    required=False)

    remove_hat = forms.BooleanField(label="Удалить текущую шапку",
                                    required=False)

    new_achievement = forms.ChoiceField(
        label="Выдать новую ачивку",
        choices=[(None, "---")] + [(key, value.get("name"))
                                   for key, value in ACHIEVEMENTS],
        required=False,
    )

    is_banned = forms.BooleanField(label="Забанить", required=False)

    ban_days = forms.IntegerField(label="Бан истечет через N дней",
                                  initial=5,
                                  required=False)

    ban_reason = forms.CharField(
        label="Причина бана",
        max_length=5000,
        required=False,
        widget=forms.Textarea(attrs={"maxlength": 5000}),
    )

    is_rejected = forms.BooleanField(label="Размодерирвать", required=False)

    delete_account = forms.BooleanField(
        label="Удалить аккаунт и обнулить подписку", required=False)

    ping = forms.CharField(
        label="Отправить сообщение",
        max_length=5000,
        widget=forms.Textarea(),
        required=False,
    )

    add_membership_days = forms.IntegerField(label="Добавить дней членства",
                                             required=False)
Example #5
0
class UserIntroForm(ModelForm):
    slug = forms.CharField(
        label="Никнейм",
        required=True,
        max_length=32,
        min_length=3,
        widget=forms.TextInput(attrs={
            "pattern": "[A-Za-z0-9_-]+",
            "minlength": 3,
        }),
    )
    full_name = forms.CharField(label="Ваше реальное имя",
                                required=True,
                                max_length=128)
    email = forms.EmailField(label="E-mail", required=True)
    avatar = ImageUploadField(
        label="Аватар или фото",
        required=False,
        resize=(512, 512),
        convert_to="jpg",
    )
    city = forms.CharField(label="город", required=True, max_length=120)
    country = forms.ChoiceField(label="Страна",
                                choices=COUNTRIES,
                                required=True)
    bio = forms.CharField(
        label="Ссылочки на себя и всякое такое",
        required=False,
        max_length=1024,
        widget=forms.Textarea(attrs={"maxlength": 1024}),
    )
    contact = forms.CharField(
        label="Контакт для связи",
        required=True,
        max_length=256,
    )
    company = forms.CharField(label="Компания", required=True, max_length=128)
    position = forms.CharField(label="Должность или что вы делаете",
                               required=True,
                               max_length=128)
    intro = forms.CharField(
        label="#intro",
        required=True,
        widget=forms.Textarea(
            attrs={
                "maxlength": 10000,
                "minlength": 600,
                "placeholder": "Расскажите Клубу о себе...",
            }),
    )
    email_digest_type = forms.ChoiceField(
        label="Подписка на дайджест",
        required=True,
        choices=User.EMAIL_DIGEST_TYPES,
        initial=User.EMAIL_DIGEST_TYPE_WEEKLY,
        widget=forms.RadioSelect(),
    )
    privacy_policy_accepted = forms.BooleanField(
        label="Даю согласие на обработку своих персональных данных",
        required=True)

    class Meta:
        model = User
        fields = [
            "slug",
            "full_name",
            "email",
            "avatar",
            "company",
            "position",
            "city",
            "country",
            "bio",
            "contact",
            "email_digest_type",
        ]

    def clean_slug(self):
        slug = self.cleaned_data["slug"]
        slug = str(slug).strip()

        if slug:
            if not re.match(r"^[a-zA-Z0-9-_]+$", slug):
                raise ValidationError("В нике использованы недопустимые знаки")

            is_exists = (User.objects.filter(slug__iexact=slug).exclude(
                id=self.instance.id if self.instance else None).exists())

            if not is_exists:
                return slug

        raise ValidationError(
            "Пользователь с таким ником уже существует. Выберите другой")