Wpis z mikrobloga

Jest formularz, w którym wypełniam atrybuty piłkarza w skali 1-10. Atrybuty są w klasie Details (atr1 - atr5), tak samo jak position.

Jak zrobić, aby labele dla atrybutów były wyświetlane według pozycji piłkarza? Inne labele dla bramkarza, a inne dla napastnika.

W tym momencie zrobiłem najprościej, ale też najgłupiej i najmniej wygodnie - w funkcji w Views po prostu jest if position = 'GK' to wtedy label 1 = 'coś tam', label2 = 'coś innego' i tak dla każdej pozycji. Przy czym labele to osobne elementy htmla xD Generalnie jakby ktoś to zobaczył w kodzie to by padł ze śmiechu.

Pytanie jak to zrobić porządnie - dodać do klasy atr1_name i tak po kolei, wtedy wykorzystam nazwy w innych widokach? Albo przez init w forms? Jakąś funkcją?

Jak coś jest niejasne, a znajdzie się chętny do pomocy to mogę udostępnić ekran i wytłumaczyć w praktyce.

#django #python
  • 5
@Lunatik: Tak, pole atrybut przechowuje tylko wartość i chciałbym, żeby dla danego obiektu label atrybutu był w zależności od wartości w polu position.

Np. tworzę bramkarza, ustalam mu wartości atrybutów i w widoku wyświetla się, że atrybut pierwszy ma label "łapanie piłki" itd.

Tworzę napastnika, ustalam mu wartości atrybutów i w widoku wyświetla się, że atrybut pierwszy ma label "technika" itd.
@ancym1: tak na szybko widzę tu trzy sposoby rozwiązania tego problemu:
1. Trzymasz wszystkie możliwe pola, tylko w zależności od rodzaju gracza niektóre są puste. Wtedy w formularzu wyświetlasz tylko te pasujące do danej pozycji
2. Osobne modele dla różnych pozycji (mogą dziedziczyć z nadrzędnej klasy Player jak mają jakąś wspólną logikę)
3. EAV. Masz modele Player, Position, Attribute i PlayerAttribute. Player ma FK do Position, Position i Player mają