Alex Grs
Alex Grs

Reputation: 3301

Django: add index to meta field

I have the following model:

from model_utils.models import TimeStampedModel
class MyModel(TimeStampedModel):
    ....
    name = models.CharField(max_length=100)
    ....

This model is based on Django Utils (https://django-model-utils.readthedocs.org/en/latest/models.html#timestampedmodel) which adds created and modified fields to my model.

What I need know is way to add a db_index to the modified field of my model. But I can't modify the TimeStampedModel file because it is part of an external dependency.

Do you know any easy solution for this kind of issue?

Thank you.

Upvotes: 3

Views: 2471

Answers (1)

Jesus Gomez
Jesus Gomez

Reputation: 1520

Yes you can using model Meta.

if you don't need to inherit meta from the TimeStampedModel just use this:

class Meta:
   ...

otherwise you need to explicitly tell django to look into the parent's meta first like this:

class Meta(TimeStampedModel.Meta):

this might be a hackish solution but maybe you can try using index_together to make django create an index for your model:

like this:

class Meta(TimeStampedModel.Meta):
    index_together = [
        ["modified",],
    ]

try it out and tell me if it worked

EDIT:

Another solution coming from: How to override the default value of a Model Field from an Abstract Base Class:

try adding this to your MyModel class

MyModel._meta.get_field('modified').db_index = True

Upvotes: 5

Related Questions