Django & MongoDB имеет проблему с автоматическим полем идентификатора по умолчанию на django моделях - PullRequest
0 голосов
/ 06 апреля 2020

У меня Django 2, что в нем используется Rest Framework и Djon go.

Учетная запись может быть создана, но когда я пытаюсь увидеть список созданных Учетных записей, чтобы обновить или сделать любую Я не могу получить список учетных записей и выдает ошибку в поле идентификатора.

Я думаю, что это проблема с MongoDB, так как я могу решить эту проблему?

Вот ошибка, за которой следуют коды, связанные с моей учетной записью

MigrationError в / Accounts / account / id Метод запроса: GET URL запроса: http://localhost: 8000 / Accounts / account / Django Версия: 2.2.7 Тип исключения: MigrationError Значение исключения:
id Место исключения: C: \ Users \ P C 001 \ AppData \ Local \ Programs \ Python \ Python38-32 \ lib \ site-packages \ djongo \ sql2mongo \ query.py в _align_results, строка 287 Python Исполняемый файл: C: \ Users \ P C 001 \ AppData \ Local \ Programs \ Python \ Python38 -32 \ python .exe Python Версия: 3.8.0 Python Путь:
['E: \ Project \ accountingPy', '* 10 57 *: \ Users \ P C '' 001 \ AppData \ Local \ Programs \ Python \ Python38-32 \ python38.zip ',' C: \ Users \ P C 001 \ AppData \ Local \ Programs \ Python \ Python38-32 \ DLLs ',' C: \ Users \ P C 001 \ AppData \ Local \ Programs \ Python \ Python38-32 \ lib ',' C: \ Users \ P C 001 \ AppData \ Local \ Programs \ Python \ Python38-32 ',' C: \ Users \ P C 001 \ AppData \ Roaming \ Python \ Python38 \ site-packages ',' C: \ Users \ P C '' 001 \ AppData \ Local \ Programs \ Python \ Python38-32 \ lib \ site-packages '] Время сервера: понедельник, 6 апреля 2020 года 15:00:38 + 0000

Запись, которая хранится в базе данных

// 1
{
    "_id": ObjectId("5e8b3a0c10fc9f40cdca44be"),
    "label": "Mapping",
    "owner": "Nasser",
    "balance_currency": "USD",
    "balance": "23.00",
    "desc": "This the Cash account that manage by cash payments",
    "status": true,
    "created_at": ISODate("2020-04-06T14:17:48.838Z"),
    "updated_at": ISODate("2020-04-06T14:17:48.838Z")
}

Модель учетной записи

class Account(models.Model):
    class Meta:
        db_table = 'account'
    def __str__(self):
        return self.label

    label = models.CharField(max_length=20,unique=True)
    owner = models.CharField(max_length=20)
    balance = MoneyField(max_digits=14, decimal_places=2, 
                          default_currency='USD')
    desc = models.CharField(max_length=200, blank=True)
    status = models.BooleanField(default=1)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

Сериализатор учетной записи

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = ['label', 'owner', 'balance',
          'desc', 'status', 'created_at', 'updated_at']

URL

router = DefaultRouter()
router.register(r'', AccountViewSet, basename='account')
urlpatterns = router.urls

Учетная запись Set

class AccountViewSet(viewsets.ViewSet):

    def list(self, request):
        account = Account.objects.all()
        serializer = AccountSerializer(account, many=True)
        return JsonResponse(serializer.data, safe=False)
      # return HttpResponse("List")

AccountFrom

class AccountForm(ModelForm):
    class Meta:
        model = Account
        fields = ['label', 'owner', 'balance',
                  'desc', 'status']

Basi c Решение Я добавляю поле id none autoIncrement в модели и проблема была исправлена.

id = models.IntegerField (primary_key = True, unique = True)

Но я думаю, что это не очень хорошее решение, поскольку Id - это не Автоинкремент, и каждый раз, когда мне нужно проверить последний Id иметь поле идентификатора автоинкремента. Как я могу создать поле автоматического увеличения в MongoDB?

...