django模型字段集合

时间:2018-11-19 17:53:32

标签: python django

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

我的某些模型包括文本字段。 文本定义为:   -CharField(tex)   -CharField(字体大小)   -CharField(字体粗细)   -CharField(颜色)

所以我的某些模型需要这些文本中的一到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... 

2 个答案:

答案 0 :(得分:0)

也许最好为文本定义一个单独的模型,并与Box具有ForeignKey关系。例如:

class Text(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)

class Box(..):
   text1 = models.ForeignKey(Text)
   text2 = models.ForeignKey(Text)
   text3 = models.ForeignKey(Text)

答案 1 :(得分:0)

我不确定您想要实现什么。看来您可以将此模型简化为此

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中使用任意数量的TextCollection。 如果您还希望在多个框中输入文本,则可以使用ManyToManyField而不是ForeignKey。 https://docs.djangoproject.com/en/2.1/topics/db/examples/many_to_many/