Python 存储多个其他模型的Django模型存储多个其他模型

Python 存储多个其他模型的Django模型存储多个其他模型,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我正在学习Django,所以这对我来说都是全新的。我试图创建的是我的管理面板中的一些功能,这将允许我创建这样的布局 Test -Event1 --Property1 --Property2 --Property3 --Property4 -Event2 --Property1a --Property2b --Property3c --Property4d -Event3 --Property1aa --Property2bb --Property3cc --Property4dd -Event4

我正在学习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']
我有我的管理面板设置,以便我可以创建多个属性。但是当我进入管理面板中的“事件”部分时,我只能创建事件。我希望能够选择属性并将其添加到我的事件中。然后我希望能够转到测试页面并将事件添加到其中


我试图创建的一个很好的示例是以下内容的副本:

您应该为事件和属性定义外键:

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']

如果不让我知道您很乐意提供帮助,这应该可以解决您的问题。

是否要将任务设置为事件的外键,将事件设置为属性的外键?我在尝试迁移时得到了这一点。。您试图在没有默认值的情况下将不可为空的字段“event”添加到属性中;我们不能这样做(数据库需要一些东西来填充现有行)。迁移时您是否请求设置默认值?您应该设置一些值,因为在迁移正在退出的事件记录时,任务表中已经存在一些字段。事件字段中的get null字段必须有一些值,所以请提供以前添加的任务的一些值。这是一个问题。我刚刚清理了数据库,从零开始,因为我什么都没有。是的,这似乎奏效了。现在我需要设置一些我遇到问题的其他东西。我会一直努力,直到我陷入困境。非常感谢。