V Djangu se velice hezky vytvářejí mocné modely.

Proč se ale napojení na tyto modely často provádí textově?

Například administraci svážu s modelem takovouto textovou formou
class HumanAdmin(admin.ModelAdmin):
    list_display = ('name', 'surname', 'birth_date', 'sex') # textové vazby
    list_filter = ('sex') # textové vazby
    search_fields = ['name', 'surname'] # textové vazby

Nebo formulář svážu s modelem opět textem
class HumanForm(forms.ModelForm):
    name = forms.CharField()
    surname = forms.CharField()
    birth_date = forms.DateField()
    sex = forms.BooleanField()

    class Meta:
        model = Human
        fields = ('name', 'surname', 'birth_date', 'sex') # textové vazby

Přináší to problémy:
- možnost překlepu v názvech bez syntaktické kontroly
- vznik chyby při přejmenování modelu nebo jeho atributu
- IDE nenapovídá
- opakovaný řetězec na více místech se špatně udržuje

Nelze propojení řešit nějakým sofirtikovanějším způsobem, ve smyslu ?
fields = (Human.name.__name__, Human.surname.__name__, Human.birth_date.
__name__, Human.sex.__name__)
Problém je, že proměnná nemá atribut __name__ (jako má třeba funkce)

Případně mě napadá, že by model musel obsahovat konstanty s názvy atributů, 
např.
classHuman(models.Model):
    name = models.TextField()
    surname = models.TextField()
    birth_date = models.DateField()
    sex = models.BooleanField()

    NAME = "name"
    SURNAME = "surname"
    BIRTH_DATE = "birth_date"
    SEX = "sex"

Řetězce jsou alespoň pohromadě a na jednom místě. Pro případné úpravy do 
budoucna lépe uchopitelné.
Poté by šlo používat takto:
fields = (Human.NAME, Human.SURNAME, Human.BIRTH_DATE, Human.SEX)

Ale není to DRY a nikde sem to neviděl :( tak jsem na pochybách.

Proto se chci zeptat:
1. Proč se používají řetězce jako odkazy na atributy tříd ?
2. Používá se nějaký sofistikovaný způsob ?

Díky za reakce.

-- 
-- 
E-mailová skupina [email protected]
Správa: http://groups.google.cz/group/django-cs
--- 
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs 
ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete 
e-mail na adresu [email protected].
Chcete-li zobrazit tuto diskusi na webu, navštivte 
https://groups.google.com/d/msgid/django-cs/929d65b7-d89f-4237-90c7-a7bf7d4d5188%40googlegroups.com.
Další možnosti najdete na adrese https://groups.google.com/d/optout.

Reply via email to