You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
assume that i have two models shop, customer. each shop can have only one customer with an unique phone number till deletes it. please pay attention that customer's phone_number is not unique in column. that is unique together with its shop and delete state.
fromtortoiseimportModel, fieldsclassBase(Model):
deleted_at=fields.DateTimeField(null=True)
classMeta:
abstract=TrueclassShop(Base):
title=fields.CharField(...)
classCustomer(Base):
phone_number=fields.CharField(...) # not used unique here as you expectshop=fields.ForeignKeyField('models.Shop', 'customers', fields.CASCADE)
classMeta:
unique_together= ('shop_id', 'phone_number', 'deleted_at')
but this simple code is not work as i expected
in postgres that i tested, created index did'nt follow by nulls not distinct
when not follow. unique index considers nulls not equal.
tortoise version : 0.21.3
The text was updated successfully, but these errors were encountered:
The fact that it does not use nulls not distinct is intentional (as much intentional it can be for the case of default behaviour)
And I am pretty sure it shouldn't be default behaviour
Although adding support would be reasonable, I think it should be done by allowing it as param in tortoise.contrib.postgres.indexes.PostgreSQLIndex, not by changing behaviour in unique_together
You can contribute this change in PR, or may be I'll be able to take it on somewhere later
I think you can bypass this problem pretty easily by modifying your migration scripts if you have one, or creating index manually if you don't use migration system, as indexes declared on models doesn't affect runtime behaviour
Hi
that was great idea. by changes at this PR i solved my problem with following approach:
fromtortoise... importPostgresUniqueIndexasPUI, SqliteUniqueIndexasSUIdefunique_index_depends_on_current_db_type(fields, null_fields):
"""this function just support sqlite/postgres unique index and nulls will be consider equal"""is_postgres=envs.db_url.lower().startswith('postgres')
unique_index_class=PUIifis_postgreselseSUIreturnunique_index_class(fields=fields, nulls='not distinct'ifis_postgreselsenull_fields)
classCustomer(BaseModel):
classMeta:
indexes= [unique_index_depends_on_current_db_type(fields=['shop_id','phone_number', 'deleted_at'], null_fields=['deleted_at'])]
assume that i have two models
shop
,customer
. each shop can have only one customer with an unique phone number till deletes it. please pay attention that customer's phone_number is not unique in column. that is unique together with its shop and delete state.but this simple code is not work as i expected
in postgres that i tested, created index did'nt follow by
nulls not distinct
when not follow. unique index considers nulls not equal.
tortoise version : 0.21.3
The text was updated successfully, but these errors were encountered: