Django модель, которая хранит несколько других моделей, которые хранят несколько других моделей - PullRequest
0 голосов
/ 16 апреля 2020

Я учусь Django, так что это все очень ново для меня. То, что я пытаюсь создать, - это немного функциональности в моей панели администратора, которая позволит мне создать подобный макет.

Test
-Event1
--Property1
--Property2
--Property3
--Property4
-Event2
--Property1a
--Property2b
--Property3c
--Property4d
-Event3
--Property1aa
--Property2bb
--Property3cc
--Property4dd
-Event4
--Property1aaa
--Property2bbb
--Property3ccc
--Property4ddd

Я хочу провести несколько тестов. Моя текущая настройка модели выглядит следующим образом:

from django.db import models
from django.forms import ModelForm

TYPE_CHOICES = (
    ("string", "string"),
    ("integer", "integer"),
    ("array", "array"),
    ("boolean", "boolean")
)

class Test(models.Model):
    name = models.CharField(max_length=255)
    description = models.CharField(max_length=255, blank=True)

    class Meta:
        verbose_name = 'Test'
        verbose_name_plural = 'Tests'

    def __str__(self):
        return self.name


class Event(models.Model):
    name = models.CharField(max_length=255)
    test_id = models.IntegerField()

    class Meta:
        verbose_name = 'Event'
        verbose_name_plural = 'Events'

    def __str__(self):
        return self.name


class Property(models.Model):
    name = models.CharField(max_length=255)
    property_type = models.CharField(max_length=20, choices=TYPE_CHOICES)
    expected_value = models.CharField(max_length=255)

    class Meta:
        verbose_name = 'Property'
        verbose_name_plural = 'Properties'

    def __str__(self):
        return self.name

class TestForm(ModelForm):
    class Meta:
        model = Test
        fields = ['name', 'description']

У меня есть настройки панели администратора, чтобы я мог создать несколько свойств. Но тогда, когда я go в разделе «События» в моей панели администратора, я могу только создавать события. Я хочу иметь возможность выбрать свойства и добавить их в мое мероприятие. Затем я хочу иметь возможность go на тестовой странице и добавлять к ней события.

Хороший пример того, что я пытаюсь создать, - это копия этого сообщения: http://jsonparser.tools/tests.php

1 Ответ

1 голос
/ 16 апреля 2020

вы должны определить внешние ключи для событий и свойств:

from django.db import models
from django.forms import ModelForm

TYPE_CHOICES = (
    ("string", "string"),
    ("integer", "integer"),
    ("array", "array"),
    ("boolean", "boolean")
)

class Test(models.Model):
    name = models.CharField(max_length=255)
    description = models.CharField(max_length=255, blank=True)

    class Meta:
        verbose_name = 'Test'
        verbose_name_plural = 'Tests'

    def __str__(self):
        return self.name


class Event(models.Model):
    name = models.CharField(max_length=255)
    test = models.ForeignKey(Test,on_delete=models.CASCADE)

    class Meta:
        verbose_name = 'Event'
        verbose_name_plural = 'Events'

    def __str__(self):
        return self.name


class Property(models.Model):
    event = models.ForeignKey(Event,on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    property_type = models.CharField(max_length=20, choices=TYPE_CHOICES)
    expected_value = models.CharField(max_length=255)

    class Meta:
        verbose_name = 'Property'
        verbose_name_plural = 'Properties'

    def __str__(self):
        return self.name

class TestForm(ModelForm):
    class Meta:
        model = Test
        fields = ['name', 'description']

это должно решить вашу проблему, если не сообщите мне, рад помочь.

...