2017-07-27 1 views
0

Tenez compte de ces trois modèles:modèle Django: un FieldType pour faire un ensemble/liste des instances d'un autre modèle

class Statement(models.Model): 
    statement_id = models.CharField(max_length=200) 
    title = models.CharField(max_length=200) 
    statement-keywords = ? 
    statement-contexts = ? 

class Keyword(models.Model): 
    word = models.CharField(max_length=200) 
    statement = models.ManyToManyField(Statement) 
    def __str__(self): 
     return self.word 

@python_2_unicode_compatible 
class Context(models.Model): 
    context_word = models.CharField(max_length=200) 
    keyword = models.ManyToManyField(Keyword) 
    statement = models.ManyToManyField(Statement) 
    def __str__(self): 
     return self.context_word 

Chaque déclaration est censé avoir un ensemble de mots clés associés et Contextes. Je travaille également principalement sur l'interface d'administration de ce site, et je voulais que quelqu'un puisse saisir des mots-clés et des contextes sur la même page pour mettre à jour ou soumettre une nouvelle page.

Il serait idéal si je pouvais faire une déclaration-keywords tenir un ensemble de tous Keywords « s, et statement_contexts tenir un ensemble de tous les mots-clés associés à cette instance de déclaration et déclaration contexte tiennent un ensemble de tous Context » s associé à cette déclaration. Mais il y a deux problèmes qui se présentent pour moi:

  1. Parce que les mots-clés Déclaration est au-dessus et le contexte, je ne peux pas faire référence à des mots clés et contexte comme des objets dans une relation ManyToMany. Si je le fais, je reçois un message d'erreur. Si je déplace Statement en dessous de Keyword et Context, alors Keyword et Context seraient tous les deux incapables de faire une déclaration de référence (j'obtiendrais un message d'erreur).

  2. Je ne sais pas s'il y a un type de champ qui pourrait dire "ce champ va contenir un ensemble d'objets", ou une alternative à cela.

Répondre

0

Vous n'avez besoin d'aucun de ces champs. Vous les avez déjà: ce sont les relations inverses de ManyToManyFields sur Keyword et Context.

+0

L'un des avantages d'avoir les deux champs est pour l'interface d'administration. À l'heure actuelle, sur la page de soumission/mise à jour des déclarations, aucune information sur les mots-clés et les contextes associés à une déclaration ne s'affiche. Je sais que je pourrais faire une requête de relation inverse, mais ... Ce serait plus facile si le modèle Statements avait juste des champs pour les mots-clés et les contextes. Je ne saurais pas non plus comment utiliser la relation inverse pour modifier le modèle Statements ou affecter son affichage sur admin. –

+0

C'est exactement ce que [les administrateurs en ligne] (https://docs.djangoproject.com/fr/1.11/ref/contrib/admin/#inlinemodeladmin-objects) sont pour. –