/
Stormsidee
/
StormWiki
Обзор
Документация
Войти
/
Stormsidee
/
StormWiki
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
app/forms.py
104 строки
3 KB
Stormsidee
fix bugs, added auth, added func - published articles
05 ноя 2025, 18:36
05 ноя 2025, 18:36
d957e6a
Код
Авторство
О чём код?
from django import forms from .models import Article, Tag class ArticleForm(forms.ModelForm): tags_input = forms.CharField( required=False, label='Теги', widget=forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'python, django, web, programming' }), help_text='Введите теги через запятую' ) class Meta: model = Article fields = ['title', 'content', 'is_published'] widgets = { 'title': forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Введите заголовок статьи' }), 'content': forms.Textarea(attrs={ 'class': 'form-control', 'rows': 15, 'placeholder': 'Начните писать свою статью здесь...' }), 'is_published': forms.CheckboxInput(attrs={ 'class': 'form-check-input' }), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if self.instance and self.instance.pk: self.fields['tags_input'].initial = self.instance.get_tags_list() def clean_tags_input(self): tags_str = self.cleaned_data.get('tags_input', '') if not tags_str: return [] tag_names = [name.strip().lower() for name in tags_str.split(',') if name.strip()] tag_names = list(set(tag_names)) tags = [] for name in tag_names: if len(name) > 50: raise forms.ValidationError(f'Тег "{name}" слишком длинный') tag, created = Tag.objects.get_or_create(name=name) tags.append(tag) return tags def save(self, commit=True): article = super().save(commit=False) if commit: article.save() if 'tags_input' in self.cleaned_data: article.tags.set(self.cleaned_data['tags_input']) return article from django import forms from django.contrib.auth.forms import UserCreationForm, AuthenticationForm from django.contrib.auth.models import User class CustomUserCreationForm(UserCreationForm): email = forms.EmailField( required=True, widget=forms.EmailInput(attrs={ 'class': 'form-control', 'placeholder': 'your@email.com' }) ) class Meta: model = User fields = ['username', 'email', 'password1', 'password2'] widgets = { 'username': forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Введите имя пользователя' }), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['password1'].widget.attrs.update({'class': 'form-control'}) self.fields['password2'].widget.attrs.update({'class': 'form-control'}) class CustomAuthenticationForm(AuthenticationForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['username'].widget.attrs.update({ 'class': 'form-control', 'placeholder': 'Имя пользователя' }) self.fields['password'].widget.attrs.update({ 'class': 'form-control', 'placeholder': 'Пароль' })