Wpis z mikrobloga

#django

Jeśli mam model

class Abc(models.Model):
....krotkanazwa = models.TextField()
....dluganazwa = models.CharField()

to jak w drugim mogę zrobić listę wyboru z Abc w formie krótkanazwa: dluganazwa inaczej jak tworząc to np na sztywno przez tuple?

w tupli np mam wartości
TUPLA = (('m', 'm : mama'), ('t', 't : tata'))

i kod drugiego modelu

class Efg(models.Model):
....wybierztyp = models.CharField(choices=TUPLA)

wtedy mam rozwijaną listę z
m: mama
t: tata

tyle, że jak chcę coś dodać to muszę w tupli dorzucić to w kodzie, a chciałbym tak zrobić, żeby przez admin panel dodając w modelu Abc np krotka
nazwa "d", a dluganazwa "dziadek", w polu z rozwijaną listą w Efg wybierztyp pojawiały się dodane wartości jako d: dziadek itd
  • 6
@Cnrash3: tak nawiasem - nie możesz po prostu stworzyć relacji wiele-do-jednego pomiędzy Efg a Abc? Wygląda to na klasyczny przypadek, chyba, że czegoś nie przedstawiłeś w przykładzie. Relację określasz po stronie wiele, więc w modelu Abc tworzysz pole reprezentujące relację, np. tak:
class Abc(models.Model):
____efg_type = models.ForeignKey(Efg)

I wtedy Django robi wszystko za Ciebie (jeśli korzystasz z generic views to masz od razu wszystko w kontekście, więc 0 pracy z tworzeniem
@gofr: Zrobiłem to przez ForeignKey i działa. Dzięki.
Teraz tylko nie wiem jeszcze jak zrobić żeby w template pokazywało samo krotkanazwa czyli np M, a w panelu admina na liście dodanych M: Mama

raczej przez to że w Abc mam
def str(self):
....return self.krotkanazwa + ': ' + self.dluganazwa

da się jakoś oddzielić __str_dla admina i to co później idzie dla template?

ForeignKey bierze obie wartości czyli
@Cnrash3: nie jestem pewien, czy rozumiem Twoje pytanie. Chcesz renderować inną wartość tekstową dla instancji klasy Abc po stronie szablonu i panelu admina? Jeśli tak:
To jak będziesz renderował dane po stronie template to whatever - jeżeli nie chcesz się odwoływać przez {{obiektabc.krotka_nazwa}} {{obiektabc.dluga_nazwa}} to zrob sobie property na modelu Abc np.
@property
def nazwa(self):
___return u'{} {}'.format(self.krotka_nazwa, self.dluga_nazwa)
i odwołuj się po {{obiekt
abc.nazwa}}
A metodę _