Как создать класс модели, чтобы отобразить три различных класса моделей и получить доступ к их полям на странице django-admin - PullRequest
0 голосов
/ 17 октября 2018

Мне нужна помощь в структурировании классов модели (какой ключ должен быть внешним ключом или в м2 м2), который поможет пользователю добавить новые "SchPrograms" с его параметрами (с использованием таблицыinline) со страницы администратора Djanog.Мне удается создать страницу, где каждый может добавить SchPrograms с параметрами.

В настоящее время параметры располагаются ниже поля SchPrograms (список раскрывающихся списков, в которых пользователь может выбрать различные VisVisitParameters для SchPrograms из списка раскрывающегося списка).

Но я хотел иметь три filter_horizontal 1-й filter_horizontal будет иметь существующие SchPrograms , когда я выберу любую из SchPrograms из этого спискаОн будет выдавать уже присвоенные VisVisitParameters во 2-м filter_horizontal для этого "SchPrograms" , а затем в 3-м filter_horizontal пользователь может выбрать VisVisitParameters имена для SchPrograms, которые в настоящее время создаются.

Прямо сейчас у меня не может быть даже одного filter_horizontal , поскольку я использую поле fk, но когда я изменил его m2mзатем у меня возникли проблемы с доступом к переменным из других моделей.

Возможно ли иметь более 2 filter_horizontal или есть ли другой способ сделать это?

#models.py
class SchPrograms(models.Model):
   program_id = models.AutoField(primary_key=True)
   program_name = models.CharField(max_length=200, blank=True, null=False)

   def __str__(self):
       return u'%s %s %s' % (self.program_id,'-', self.program_name)

class VisVisitParameters(models.Model):
    vparameter_id = models.AutoField(primary_key=True)
    parameter_name = models.CharField(max_length=300, blank=True, null=True)
    parameter_description = models.TextField(blank=True, null=True)


    def __str__(self):
       return u'%s %s %s' % (self.vparameter_id,'-', self.parameter_name)


class VisVisitParameterMappings(models.Model):
   vp_map_id = models.AutoField(primary_key=True)
   vparameter = models.ForeignKey('VisVisitParameters', models.DO_NOTHING, blank=True, null=True)
   program = models.ForeignKey('SchPrograms', models.DO_NOTHING, blank=True, null=True)

    def __str__(self):
       return str(self.vparameter)

#admin.py
class parameterInline(admin.TabularInline):
    model = VisVisitParameterMappings

class ProgramAdmin(admin.ModelAdmin):
    list_display = ('program_id','program_name','is_active')
    inlines = [
        parameterInline,
    ]
...