首页 > 解决方案 > 模型字段的django集合

问题描述

我正在尝试在 django 中设置不同的模型。

我的一些模型包含文本字段。文本定义为: - CharField (tex) - CharField (font-size) - CharField (font-weight) - CharField (color)

所以我的一些模型需要这些文本中的一到 n 个。

是否可以创建一个字段集合,例如包含所有 4 个字段的“Test-Collection”。这样我就不必为模型中需要的每个文本手动编写所有 4 个字段?

像这样的东西:

class Box(CMSPlugin):
    text1 = models.CharField(max_length=100)
    text1_font_weight = models.CharField(max_length=100)
    text1_font_size = models.CharField(max_length=100)
    text1_color = models.CharField(max_length=100)

    text2 = models.CharField(max_length=100)
    text2_font_weight = models.CharField(max_length=100)
    text2_font_size = models.CharField(max_length=100)
    text2_color = models.CharField(max_length=100)

    text3 = models.CharField(max_length=100)
    text3_font_weight = models.CharField(max_length=100)
    text3_font_size = models.CharField(max_length=100)
    text3_color = models.CharField(max_length=100)

进入那个:

class Box(CMSPlugin):
    text1 = TextColelction...
    text2 = TextColelction...
    text3 = TextColelction... 

标签: pythondjango

解决方案


我不确定你想要达到什么目的。看起来您可以将此模型简化为

from django.db import models


class TextCollection(models.Model):
    text = models.CharField(max_length=100)
    text_font_weight = models.CharField(max_length=100)
    text_font_size = models.CharField(max_length=100)
    text_color = models.CharField(max_length=100)
    box = models.ForeignKey("Box", on_delete=models.CASCADE, related_name="textcollections") 


class Box(CMSPlugin):
    pass

这样,您可以在 Box 中使用尽可能多的 TextCollections。如果您还想要多个框中的文本,则可以使用 ManyToManyField 而不是 ForeignKey。 https://docs.djangoproject.com/en/2.1/topics/db/examples/many_to_many/


推荐阅读