For this exact reason I always use `sqlmigrate` to get the auto generated
sql statement (and the backwards sql) and put this statements in
 `forwards` and `backwards` functions. I then separate the db and state
operations.

I bet if you run `python manage.py sqlmigrate <app name> <migration>` on
the migrations that removes the field from the model, you will see the sql
that deletes the index.

On Sat, Oct 5, 2024 at 8:02 AM Alan Evangelista <[email protected]>
wrote:

> I found out the cause was that I recently removed the max_documents field
> in the Template model, Postgres automatically deletes a constraint when one
> of the related columns is deleted and Django does not realize it. I
> manually updated the Django migration that deleted the field to also
> deleted the constrain and it worked fine.
>
> On Fri, Oct 4, 2024, 10:52 Alan Evangelista <[email protected]> wrote:
>
>> Hi, everyone.
>>
>> I have the following db model:
>>
>> class Template(models.Model):
>>     max_documents = models.PositiveIntegerField(default=1)
>>     is_comparison = models.BooleanField(default=False)
>>     ...
>>     class Meta:
>>         constraints = [
>>             models.CheckConstraint(
>>                 check=models.Q(is_comparison=False) |
>> models.Q(max_documents__gte=2, is_comparison=True),
>>                 name="is_comparison_requires_min_documents",
>>             ),
>>         ]
>>
>> I recently added this check constraint above and makemigrations created
>> the following db migration:
>>
>> class Migration(migrations.Migration):
>>     dependencies = [
>>         ...
>>     ]
>>
>>     operations = [
>>         migrations.AddConstraint(
>>             model_name="template",
>>             constraint=models.CheckConstraint(
>>                 check=models.Q(
>>                     ("is_comparison", False),
>>                     models.Q(("is_comparison", True),
>> ("max_documents__gte", 2)),
>>                     _connector="OR",
>>                 ),
>>                 name="is_comparison_requires_min_documents",
>>             ),
>>         ),
>>     ]
>>
>> Today I deleted the constraint and ran makemigrations again, which
>> created this second migration:
>>
>> class Migration(migrations.Migration):
>>     dependencies = [
>>         ...
>>     ]
>>
>>     operations = [
>>         migrations.RemoveConstraint(
>>             model_name="template",
>>             name="is_comparison_requires_min_documents",
>>         ),
>>     ]
>>
>> When I try to run the 2nd migration, I get the following Postgres error
>> from Django:
>> django.db.utils.ProgrammingError: constraint
>> "is_comparison_requires_min_documents" of relation "ai_template" does not
>> exist
>>
>> I checked the ai_template table schema and confirmed there is no check
>> constraint there. It seems to me Django didn't create the check constraint
>> on the Postgres db side (maybe it was enforcing it on its side) and now is
>> trying to remove it from Postgres. Is that a bug or am I missing something?
>>
>> Thanks in advance!
>>
>> --
>>
> You received this message because you are subscribed to a topic in the
>> Google Groups "Django users" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/django-users/VBkLU6AP9b4/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/django-users/8d16410d-ded2-4f2f-a457-675127825443n%40googlegroups.com
>> <https://groups.google.com/d/msgid/django-users/8d16410d-ded2-4f2f-a457-675127825443n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CAKz%2BTUsu1BE9EzvUxPHfz8ND%2BWL3uA%2B0ZyM9jsWfG%2BektwUt_Q%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-users/CAKz%2BTUsu1BE9EzvUxPHfz8ND%2BWL3uA%2B0ZyM9jsWfG%2BektwUt_Q%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CALmEK1uFCkmY%3DoYfsUsQRG%2BGR2YcF-4NvsSDOn%3DhrWYMB3vvQg%40mail.gmail.com.

Reply via email to