Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Niepuste tytuły wydarzeń #1504

Open
wants to merge 12 commits into
base: master-dev
Choose a base branch
from

Conversation

lubczanska
Copy link
Contributor

Dla "zwykłych" wydarzeń dodaje do formularza rezerwacji wydarzenia wymaganie niepustego tytułu. Dla wydarzeń typu egzamin/kolokwium dodaje wymaganie wybrania przedmiotu z listy (dla nich w miejscu tytułu wyświetlamy nazwę przedmiotu). W efekcie nigdy nie mamy problemu niewidocznego tytułu.

Usuwa też wymaganie niepustego opisu wydarzenia i zmienia checkbox publicznego wydarzenia na domyślnie zaznaczony.

Rozwiązuje #1487

@lubczanska lubczanska changed the title 1487 niepuste tytuły wydarzeń Niepuste tytuły wydarzeń May 31, 2023
@lubczanska lubczanska linked an issue May 31, 2023 that may be closed by this pull request
@@ -39,7 +39,7 @@ class Event(models.Model):
(TYPE_GENERIC, 'Wydarzenie')]

title = models.CharField(max_length=255, verbose_name='Tytuł', null=True, blank=True)
description = models.TextField(verbose_name='Opis', blank=True)
description = models.TextField(verbose_name='Opis', null=True, blank=True)
type = models.CharField(choices=TYPES, max_length=1, verbose_name='Typ')
visible = models.BooleanField(verbose_name='Wydarzenie jest publiczne', default=False)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dla większej logicznej spójności z analogiczną zmianą dla formularza (wymaga zregenerowania migracji)

Suggested change
visible = models.BooleanField(verbose_name='Wydarzenie jest publiczne', default=False)
visible = models.BooleanField(verbose_name='Wydarzenie jest publiczne', default=True)

@@ -104,9 +104,19 @@ class Meta:
model = Event
exclude = ('status', 'author', 'created', 'edited', 'group', 'interested')

def clean(self):
cleaned_data = self.cleaned_data
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jeśli nie ma konkretnego powodu, dla którego nie wywołujemy na początku metody clean z nadklasy, to warto to zrobić.

@lgpawel
Copy link
Contributor

lgpawel commented Jul 8, 2023

Byłoby w sumie dobrze, gdyby przy polach wyboru przedmiotu / tytułu pokazywała się gwiazdka sugerująca użytkownikowi, że to pole jest wymagane. Tyle tylko, że nie można tego załatwić, przez required = True, bo… nie są one wymagane (ogólnie, tylko warunkowo). Jest tu jakieś eleganckie wyjście?

@AThit7
Copy link
Collaborator

AThit7 commented Jun 13, 2024

Zmiany:

  • na początku metody clean wołana jest metoda z nadklasy, bo nie widzę ku temu przeciwskazań
  • pole visible wydarzenia domyślnie ustawione jest na True(spójność modelu z formularzem), zregenerowano migrację
  • czerwone gwiazdki dodane poprzez dodanie ich do labeli pól wymaganych warunkowo (chyba brzydkie rozwiązanie, ale nic lepszego nie wymyśliłem)
  • zmiana w pliku apps/api/rest/v1/api_wrapper/sz_api/models.py została wprowadzona zgodnie z wytycznymi lintera, ale jest ona już na master-dev d27794c

@AThit7 AThit7 force-pushed the 1487-niepuste-tytuły-wydarzeń branch from c57e156 to ca56566 Compare July 5, 2024 14:20
Comment on lines +138 to +141
if cleaned_data['type'] not in (Event.TYPE_EXAM, Event.TYPE_TEST):
cleaned_data['course'] = None
if cleaned_data['type'] != Event.TYPE_GENERIC:
cleaned_data['title'] = None
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To nie jest pytanie retoryczne: czy tak byłoby przejrzyściej, czy wręcz przeciwnie? Pewne testy przestają się powtarzać, ale to wcale nie musi być krok w dobrą stronę...

Suggested change
if cleaned_data['type'] not in (Event.TYPE_EXAM, Event.TYPE_TEST):
cleaned_data['course'] = None
if cleaned_data['type'] != Event.TYPE_GENERIC:
cleaned_data['title'] = None
if cleaned_data['type'] not in (Event.TYPE_EXAM, Event.TYPE_TEST):
cleaned_data['course'] = None
elif cleaned_data['course'] == None:
raise # wyjątek
if cleaned_data['type'] != Event.TYPE_GENERIC:
cleaned_data['title'] = None
elif cleaned_data['title'] in ('', None):
raise # wyjątek

Copy link
Collaborator

@AThit7 AThit7 Jul 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Początkowo wydawało mi się, że wersja pierwotna jest trochę bardziej przejrzysta, bo bloki kodu (te oddzielone pustymi liniami) dotyczą odrębnych kwestii łatwiejszych do zauważenia. W pierwszym czyścimy niepotrzebne pola, a w drugim sprawdzamy, czy pola obowiązkowe są wypełnione. W zasugerowanej zmianie te bloki są podzielone względem tego, którym z pól cleaned_data się zajmujemy, co moim zdaniem jest trochę mniej czytelne. Przy dodawaniu kolejnych pól (np. thesis) będziemy dodawać kolejne bloki zamiast po jednym ifie do każdego z dwóch bloków. Może tak będzie lepiej a może nie, ale warto wziąć to pod uwagę. Na początku ten elif ... wydał mi się mało czytelny, w pierwotnej wersji można usunąć else a elif zamienić na if (to nie ja pisałem tamten fragment) i przejrzystość moim zdaniem jeszcze bardziej się poprawi (a liczba testów ani logika się nie zmieni). Ogólnie to im dłużej o tym myślę, tym bardziej odnoszę wrażenia, że czytelność obu wersji jest taka sama.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Niepuste tytuły wydarzeń
3 participants