/ / Classe astratta Django, pagina modulo su selezione dinamica - django, modelli django, django-admin, django-views

Classe astratta Django, pagina di forma su selezione dinamica - django, modelli django, django-admin, django-views

Se sto creando un articolo in /admin/product/ ottengo alcuni 2 campi che sono descritti nella classe product / models.py Item: category e name;
Vorrei che un terzo campo appaia dinamicamente durante la creazione di un oggetto in base alla categoria scelta (a o b):

CATEGORIES = (
("a", "Apple"),
("b", "Banana"),
)

class Item(models.Model):
category    = models.ForeignKey(choices=CATEGORIES)

name        = models.CharField(max_length=255)
"""
category.a:
color       = models.CharField(max_length=21)
category.b:
count       = models.CharField(max_length=21)
"""

Il campo name sarà come per a quindi per b categorie e (color o countcampo apparirà solo per (a o b) categorie rispettivamente;

Qualsiasi aiuto è molto apprezzato. Grazie.

Post scriptum
Ci scusiamo per il titolo in qualche modo sbagliato;

risposte:

2 per risposta № 1

Penso che quello che stai cercando di fare sia avere dei modelliquesto cambia in base alla categoria. Il modo in cui lo farei è definire un modello astratto (probabilmente chiamato frutto, in questo caso) con tutte le informazioni comuni, e poi ereditarlo in un modello chiamato banane e un modello chiamato mele.

Per aggiungere una nuova banana / mela, quindi, utilizzerei il modulo di amministrazione appropriato o aggiungo la logica alla vista appropriata che determina il tipo di oggetto da aggiungere.

https://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes

Modificare: Sfortunatamente non so come l'interfaccia di amministrazione si occupa di classi astratte e non ho una installazione di prova a portata di mano. Per quanto riguarda la logica, nella visione mi aspetterei che la logica fosse qualcosa del tipo:

from models import banana, apple
def fruitView(request)
if request.REQUEST["Type"] = "Banana":
b = banana(request.REQUEST["Count"])
b.save()
else:
a = apple(request.REQUEST["Colour"])
a.save()