Как я могу гарантировать, что пустые поля не будут вставлены в коллекцию mongodb, начиная с django, с помощью соединителя djon go? - PullRequest
0 голосов
/ 21 февраля 2020

Я делюсь фиктивным кодом, ожидая, что я буду максимально четким.

1. У меня есть такая модель

from django.db.models import Model, CharField, IntegerField, DateField

class Account(Model):
    name = CharField(max_length=30, null=False, blank=False, unique=True)
    rank = IntegerField(null=True, blank=True)
    date = DateField(null=True, blank=True)

2. У меня есть настройки БД в django, например:

DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'TEST',
        'HOST': 'localhost'
    }
}

3. После запуска команд миграции модели в оболочке django я добавил два объекта (документа) в сконфигурированную БД TEST, как это

In [1]: from dummy.models import Account

In [2]: Account.objects.create(name="Sai")
Out[2]: <Account: Sai>

In [3]: Account.objects.create(name="Ravi", rank=1)
Out[3]: <Account: Ravi>

4. Когда я проверяю в Mongodb CLI, я также получаю нулевые значения

> db.dummy_account.find().pretty();
{
        "_id" : ObjectId("5e4f54939069175d6ed7890e"),
        "id" : 1,
        "name" : "Sai",
        "rank" : null,
        "date" : null
}
{
        "_id" : ObjectId("5e4f54a89069175d6ed7890f"),
        "id" : 2,
        "name" : "Ravi",
        "rank" : 1,
        "date" : null
}

Q. (Поля с нулевым значением не должны сохраняться) Что мне нужно сделать, чтобы получить ожидаемый результат, подобный этому?

> db.dummy_account.find().pretty();
{
        "_id" : ObjectId("5e4f54939069175d6ed7890e"),
        "id" : 1,
        "name" : "Sai"
}
{
        "_id" : ObjectId("5e4f54a89069175d6ed7890f"),
        "id" : 2,
        "name" : "Ravi",
        "rank" : 1
}

1 Ответ

0 голосов
/ 28 февраля 2020

Поскольку модель, которую вы создали, Account имеет 3 поля, DjAngo всегда будет вставлять 'строки' (или записи) с рангом и датой, установленными на None. Таким образом, невозможно узнать, действительно ли пользователь установил эти значения на None, или они просто не были введены.

Это ограничение в DjAngo.

...