custom columntable names if your database column name is different than your model attribute use the dbcolumn parameter note that you ll use the field s name not its column name in api usage if your database table name is different than your model name use the dbtable meta attribute this has no effect on the api used to query the database if you need to use a table name for a manytomany relationship that differs from the default generated name use the dbtable parameter on the manytomanyfield this has no effect on the api for querying the database
from django.db import models


class Author(models.Model):
    Author_ID = models.AutoField(primary_key=True, db_column="Author ID")
    first_name = models.CharField(max_length=30, db_column="firstname")
    last_name = models.CharField(max_length=30, db_column="last")

    class Meta:
        db_table = "my_author_table"
        ordering = ("last_name", "first_name")

    def __str__(self):
        return "%s %s" % (self.first_name, self.last_name)


class Article(models.Model):
    Article_ID = models.AutoField(primary_key=True, db_column="Article ID")
    headline = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author, db_table="my_m2m_table")
    primary_author = models.ForeignKey(
        Author,
        models.SET_NULL,
        db_column="Author ID",
        related_name="primary_set",
        null=True,
    )

    class Meta:
        ordering = ("headline",)

    def __str__(self):
        return self.headline