Django вводит первичный ключ в поле с именем `id`, даже если другое поле уже объявлено первичным ключом - PullRequest
0 голосов
/ 15 марта 2019

Это мои требования, и я не могу их изменить:

  • У меня есть поле с именем name. Это мой первичный ключ
  • У меня есть поле с именем id, но это не мой первичный ключ.
  • id также является полем с автоинкрементом.

У меня есть несколько проблем:

  1. Поля автоинкремента должны быть первичными ключами в django
  2. Джанго устанавливает primary_key в полях, называемых id:

Я смог обойти первую проблему, используя это:

from django.db.models.fields import AutoField
from django.db.models.fields import checks


class AutoFieldNonPrimary(AutoField):

    def _check_primary_key(self):
        if self.primary_key:
            return [
                checks.Error(
                    "AutoFieldNonPrimary must not set primary_key=True.",
                    obj=self,
                    id="fields.E100",
                )
            ]
        else:
            return []

Теперь я могу сделать:

class TheNiceUser(models.Model):
    id = AutoFieldNonPrimary()
    name = models.CharField(max_length=16, primary_key=True)

Но, тем не менее, идентификатор объявлен как первичный ключ. Теперь у меня есть два первичных ключа в моей модели, и миграции жалуются.

Согласно django doc , это не должно иметь место: если для поля установлено primary_key, django не должен добавлять поле id в качестве первичного ключа.

Но что произойдет, если я объявлю поле id? Кажется, что django настаивает на том, чтобы сделать этот первичный ключ, даже если другое поле уже объявлено как первичный ключ.

Как мне выйти из этой ситуации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...