简体   繁体   中英

How to change the datatype of Django model field

I have a set of django models as follows

class FirstCategory(models.Model):
    first_category = models.CharField(max_length=200)
    
    def __str__(self):
        return self.first_category

class SecondCategory(models.Model):
    first_category = models.ForeignKey(FirstCategory, on_delete=models.CASCADE)
    second_category = models.CharField(max_length=200)
    
    def __str__(self):
        return self.second_category
    
class ThirdCategory(models.Model):
    first_category = models.ForeignKey(FirstCategory, on_delete=models.CASCADE)
    second_category = models.ForeignKey(SecondCategory, on_delete=models.CASCADE)
    third_category = models.CharField(max_length=200)
    
    def __str__(self):
        return self.third_category

class FinalList(models.Model):
    unique_number = models.BigIntegerField()
    name = models.CharField(max_length=200)
    
    first_category = models.ForeignKey(FirstCategory, on_delete=models.SET_NULL, null=True, db_column="first_category")
    second_category = models.ForeignKey(SecondCategory, on_delete=models.SET_NULL, null=True, db_column="second_category")
    third_category = models.ForeignKey(ThirdCategory, on_delete=models.SET_NULL, null=True, db_column="third_category")
    
    
    def __str__(self):
        return self.name

When I migrate the models and check the datatypes of the fields in the FinalList table I get the following

       column_name         |    data_type
---------------------------+-------------------
 third_category            | bigint
 first_category            | bigint
 second_category           | bigint
 unique_number             | bigint
 name                      | character varying

I had specified the first, second, and third categories as Character fields. Why is it being migrated as BigInt?

I am trying to implement a chained dropdown in my form. I am following SimpleBetterThanComplex tutorial for this

Edit 1: contents of the migration file

In the migration file, I have the following

('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),

I am not specifying this myself. I think Django creates this as a auto primary field. Could this be affecting the datatypes of the ForeignKeys ?

Django itself creates a primary key on each model, automatically named id : https://docs.djangoproject.com/en/3.2/topics/db/models/#automatic-primary-key-fields

When you creates a ForeignKey , Django creates a new field that points to the related model primary key (an automatic id in your case). You can specify another primary key with the primary_key=True argument in the field.

class FirstCategory(models.Model):
    first_category = models.CharField(max_length=200, primary_key=True)
    
    def __str__(self):
        return self.first_category


Additionally, Django provides the pk shortcut property to access the primary key in a model, regardless of whether it is automatic or manually specified.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM