Поле модели Django MongoDB с уникальными значениями или null

Я использую Djongo v1.3.6 для подключения Django к MongoDB. Теперь я хочу иметь необязательное поле для уникального значения - в моем случае номер телефона. Я подумал, что можно иметь null в качестве заполнителя для аккаунтов, у которых нет номера телефона. Однако, похоже, что MongoDB также рассматривает null как уникальное значение. Таким образом, она не позволяет мне вставлять новые объекты в базу данных после того, как один объект имеет phone_number: null

Я попытался объявить индекс для phone_number как sparse, но, похоже, это не возымело никакого эффекта. Я искал в Интернете некоторое время, но не смог найти ничего полезного для моего случая.

class UserProfile(models.Model):
    user = models.OneToOneField(AUTH_USER_MODEL, on_delete=models.CASCADE)
    phone_number = models.CharField(validators=[PHONE_VALIDATOR], max_length=17, unique=True, null=True, blank=True)
...
    meta = {
        'indexes': [
            {'fields': ['phone_number'], 'sparse' : True, 'unique' : True},
        ],
    }

Любая помощь будет очень признательна.

Я решил эту проблему, изменив индекс, созданный Djongo с помощью pymongo.

from pymongo import MongoClient, database, collection

    collection.drop_index(index_name)
    index_name = rchop(index_name, '_1')
    
    collection.create_index(
        [(index_name, pymongo.ASCENDING)],
        partialFilterExpression = {
                index_name : { "$exists" : True, "$gt" : "0", "$type" : "string" }
            }
        )

После того, как я изменил индекс, я смог вставлять нулевые значения в MongoDB, не жертвуя проверкой уникальности для не нулевых значений

Вернуться на верх