/ / Ako uložiť objekt odkazujúci na niekoľko ďalších objektov v špecifickom poradí? - python, django

Ako uložiť objekt, ktorý odkazuje na niekoľko ďalších objektov v určitom poradí? - python, django

Vyvíjam projekt Django s tromi hlavnýmitriedy: trieda A, trieda B a trieda C. Objekty triedy C sa skladajú z objektov tried A a B v špecifickom poradí. Všetky sú uložené v databáze MySQL.

V súčasnej dobe mám:

class A(models.Model):
name = models.CharField(max_length=250)

class B(models.Model):
name = models.CharField(max_length=250)

class C(models.Model):
name = models.CharField(max_length=250)
composed_of = PickledObjectField(blank=True)

Preto pri vytváraní objektov C robím nasledovné:

c1 = C()
c1.composed_of = [a1, b4, a1, b1, a2, b2, b3, b4, a2, a5]
c1.save()

pričom a1..a5 sú príklady A a b1..b5 sú príklady B.

Toto funguje, ale nie je to vôbec dobré z dvoch dôvodov: 1. Je hrozné, keď potrebujem požiadať o toto pole; 2. Ak sú inštancie A alebo B aktualizované alebo vymazané z databázy, zmena sa v inštanciách C neuskutoční.

Moja otázka: Ako môžem vytvoriť triedu s príkladmi odkazujúcimi na inštancie z iných tried v konkrétnom poradí?

Používam Django 1.8 s Python 2.7.

odpovede:

0 pre odpoveď č. 1

Po prvé, ak chcete odkazovať na iné modely, mali by ste použiť vzťah medzi mnohými (models.ManyToManyField).

Po druhé, keďže máte rôzne modely, na ktoré sa chcete odvolávať, musíte použiť všeobecné cudzie kľúče od Django rámec obsahu, takže môžete prepojiť ľubovoľný typ. Teraz je tu dobrý príspevok v blogu s kódom, ako to aplikovať na vzťah medzi mnohými.

Po tretie, keďže si chcete objednať objekty vzťahu, musíte každému vzťahu poskytnúť znak order_number takže budete potrebovať tzv through tabuľka (dokumentáciu).

Spravovanie týchto poradových čísel môže byť dosť komplikované, keď sa veci menia, tento problém vyriešil dobrý balík: Django-objednal-modelu, ale som si istý, že sú aj iní. Vyhľadajte „objednané vzťahy medzi mnohými v Django“. Pravdepodobne budete musieť prispôsobiť použitie tak, aby ste ich používali na všeobecné vzťahy m2m.