【问题标题】:django collection of model fields模型字段的django集合
【发布时间】:2018-11-19 17:53:32
【问题描述】:

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

我的一些模型包含文本字段。 文本定义为: - CharField(特克斯) - 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... 

【问题讨论】:

    标签: python django


    【解决方案1】:

    我不确定你想要实现什么。看起来你可以把这个模型简化成这个

    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/

    【讨论】:

      【解决方案2】:

      也许为文本定义一个单独的模型并与 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)
      

      【讨论】:

      • 感谢您的回答!但是,如果我想将该税包含在其他多个类别中?
      • @Flo 我添加了更新部分,请看一下。
      • 这是我喜欢的方式......但是我无法在“新框屏幕”内创建文本非常不方便
      • 对不起,我没听懂,你说的新盒子屏幕是什么意思?是其他型号吗?
      • 在管理面板中,如果我创建一个新的盒子模型,那么我希望文本“form”嵌套在盒子“form”中
      猜你喜欢
      • 2013-10-18
      • 2011-04-25
      • 2012-05-13
      • 2021-10-25
      • 2014-06-11
      • 2016-07-23
      • 2019-12-24
      • 2013-02-03
      • 1970-01-01
      相关资源
      最近更新 更多