Python 存储多个其他模型的Django模型存储多个其他模型
我正在学习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
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字段必须有一些值,所以请提供以前添加的任务的一些值。这是一个问题。我刚刚清理了数据库,从零开始,因为我什么都没有。是的,这似乎奏效了。现在我需要设置一些我遇到问题的其他东西。我会一直努力,直到我陷入困境。非常感谢。