Django CharField有选择,自动为syncdb上的数据库添加可能的选择还是迁移?

时间:2015-10-06 21:16:27

标签: python django

我知道有一种方法可以在syncdb上自动为数据库添加值,这就是Fixtures。但我想也许有办法检测选择并自动在syncdb或迁移数据库上创建这些数量的选择。

我之所以想要这个:

SERVICE_TYPES = (
    ("SALE", _("Sale")),
    ("RENT", _("Rent"))
)

class ServiceType(models.Model):

    type_of_service = models.CharField(_("Type of service"), choices=SERVICE_TYPES, default=SERVICE_TYPES[0][0], max_length=20)

    class Meta:
        verbose_name = "Service Type"
        verbose_name_plural = "Services Types"

    def __str__(self):
        pass


class Service(models.Model):
    service_type = models.ForeignKey(ServiceType)
    product_family = models.ManyToManyField(ProductFamily)

    class Meta:
        verbose_name = "Service"
        verbose_name_plural = "Services"

    def __str__(self):
        pass

我希望在syncdb上,ServiceType会自动在数据库上生成两个可能的选项,这样我就可以添加可用的Sale和Rent选项来添加服务。

2 个答案:

答案 0 :(得分:0)

您可以创建循环遍历SERVICE_TYPES的数据迁移,并确保ServiceType的表格反映了这一点。您可以在此处了解如何执行此操作:https://docs.djangoproject.com/en/1.8/topics/migrations/#data-migrations

您确定不想直接在type_of_service上设置Service属性吗?如果您不想向ServiceType添加额外属性,则最有意义。如果您要为不同类型的服务添加额外的属性,我宁愿为每种类型的服务创建不同的子类。

答案 1 :(得分:0)

是的,您可以将其添加到模型中:

SERVICE_TYPES = (
    ('sale', 'Sale'),
    ('rent', 'Rent') 
)
service_type=models.CharField(max_length=50, null=False, blank=False, choices=SERVICE_TYPES)