首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储多个其他模型的Django模型,该模型存储多个其他模型

存储多个其他模型的Django模型,该模型存储多个其他模型
EN

Stack Overflow用户
提问于 2020-04-17 01:12:04
回答 1查看 90关注 0票数 0

我正在学习Django,所以这对我来说都是非常新的。我正在尝试创建的是我的管理面板中的一点功能,将允许我创建一个这样的布局。

代码语言:javascript
复制
Test
-Event1
--Property1
--Property2
--Property3
--Property4
-Event2
--Property1a
--Property2b
--Property3c
--Property4d
-Event3
--Property1aa
--Property2bb
--Property3cc
--Property4dd
-Event4
--Property1aaa
--Property2bbb
--Property3ccc
--Property4ddd

我想要多个测试。我当前的模型设置如下所示:

代码语言:javascript
复制
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']

我有我的管理面板设置,以便我可以创建多个属性。但是当我转到管理面板中的“事件”部分时,我只能创建事件。我希望能够选择属性并将它们添加到我的事件中。然后,我希望能够转到测试页面并将事件添加到其中。

我正在尝试创建的一个很好的例子就是它的复制品:http://jsonparser.tools/tests.php

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-17 02:05:48

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

代码语言:javascript
复制
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']

这应该可以解决你的问题,如果不能让我知道很高兴帮助你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61256039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档