将自定义标签添加到Django模型实例

时间:2014-12-19 17:41:46

标签: python django django-models

对于某些背景,我在Django webapp中有两个主要模型。

第一个是包含产品测试特定阶段的模型:

class TestStage(models.Model):
    name = models.CharField(max_length=10)
    order = models.IntegerField()

    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ['order']

从此模型创建的所有测试阶段实例都将具有与其主键相关联的集合名称。

第二个是定义产品的模型。每个产品都有自己的测试阶段列表,但并非所有测试插入都用于所有产品:

class Product(models.Model):
    name = models.CharField(max_length=30)

    # more fields...

    test_stages = models.TextField()

测试阶段作为列表存储在TextField中,单个数据存储为字典。目前,这种方法运行良好,但现在我需要为每次测试插入添加自定义产品特定标签。

例如:

Product1和Product2都有TestStage1,但Product1调用其版本X,而Product2调用其版本Y.

他们都有TestStage1但有自己特定的命名约定。

我不知道如何实现这一目标,也不确定是否可以使用字段标签或使用Meta类来实现...

1 个答案:

答案 0 :(得分:2)

你能使用带有中间模型的m2m吗?

https://docs.djangoproject.com/en/1.7/topics/db/models/#extra-fields-on-many-to-many-relationships

class Product(models.Model):
    name = models.CharField(max_length=30)
    # more fields...
    test_stages = models.ManyToManyField(TestStage, through='ProductTestStage')

class ProductTestStage(models.Model):
    product = models.ForeignKey(Product)
    test_stage = models.ForeignKey(TestStage)
    label = models.CharField(max_length=50)