Specifying a mySQL ENUM in a Django model

前端 未结 9 1797
说谎
说谎 2020-12-12 17:16

How do I go about specifying and using an ENUM in a Django model?

9条回答
  •  温柔的废话
    2020-12-12 17:34

    from django.db import models
    
    class EnumField(models.Field):
        """
        A field class that maps to MySQL's ENUM type.
    
        Usage:
    
        class Card(models.Model):
            suit = EnumField(values=('Clubs', 'Diamonds', 'Spades', 'Hearts'))
    
        c = Card()
        c.suit = 'Clubs'
        c.save()
        """
        def __init__(self, *args, **kwargs):
            self.values = kwargs.pop('values')
            kwargs['choices'] = [(v, v) for v in self.values]
            kwargs['default'] = self.values[0]
            super(EnumField, self).__init__(*args, **kwargs)
    
        def db_type(self):
            return "enum({0})".format( ','.join("'%s'" % v for v in self.values) )
    

提交回复
热议问题