У меня есть несколько моделей; Словари (списки тегов), Ярлыки (теги) и различные типы статей.
В этих типах статей некоторые слова включены, а некоторые нет, например: изображение может быть помечено терминами из A, B и новостная статья со терминами из A или C.
Это, однако, существует только на уровне базы данных.
То, что я пытаюсь сделать, это выводить поля в зависимости от того, включен ли Vocab для типа контента или нет, например:
Определите, связан ли этот тип контента со словарем.
Загрузить словари
выводит CharField или Select для каждого словаря.
Однако все мои усилия для последнего шага потерпели неудачу, поэтому я надеюсь, что кто-то может указать мне правильное направление.
Приношу свои извинения за то, что не очень ясно представляю код, который я использую, поэтому вот оно:
Словарь
- Теги
NewsArticle может использовать теги из Vocab 1, 3
Блог может использовать теги от Vocab 1,2
Этот код получает словари, которые включены для типа контента:
def get_vocabularies(self, type = None):
vocabularies = {}
object = namedtuple("Vocabulary", "vid name desc help relations hierarchy multiple req tags weight")
if (type != None):
vocabs = VocabularyTypes.objects.filter(type=type)
for vocab in vocabs:
v = Vocabulary.objects.get(pk=vocab.vid)
vocabularies[v.vid] = object(vid = v.vid,
name = v.name,
desc = v.desc,
help = v.help,
relations = v.relations,
hierarchy = v.hierarchy,
multiple = v.multiple,
req = v.req,
tags = v.tags,
weight = v.weight
)
else:
vocabs = Vocabulary.objects.all()
for v in vocabs:
vocab = Vocabulary.objects.get(pk=v.vid)
vocabularies[v.vid] = object(vid = vocab.vid,
name = vocab.name,
desc = vocab.desc,
help = vocab.help,
relations = vocab.relations,
hierarchy = vocab.hierarchy,
multiple = vocab.multiple,
req = vocab.req,
tags = vocab.tags,
weight = vocab.weight
)
return vocabularies
Итак, код, который я пробовал до сих пор:
def free_tags(self, type):
vocabs = Label.objects.get_vocabularies(type)
for vid in vocabs.keys():
output = forms.CharField(label=vocabs[vid].name,
required = vocabs[vid].req,
widget = forms.TextInput(attrs={'size' : 64})
)
return output
Однако при использовании его в виде он выводит внутренний идентификатор питона (intance объекта в ... и т. Д.).
Другая проблема, однако, состоит в том, что эти поля не имеют имени, т.е. все они называются «выходные данные».
Так что мне нужно выяснить, как вывести число полей, когда количество полей неизвестно.