сделать первичный ключ с 2 полями в Django? - PullRequest
3 голосов
/ 02 февраля 2011

Я хочу сделать первичный ключ из 2 полей в Django.

Поля ниже

- current Time 
- userId

Как я могу это сделать ??

Time + userid {PK }  [ Current Time + userid]

Спасибо !!

Ответы [ 3 ]

13 голосов
/ 02 февраля 2011

В большинстве случаев вам не нужно, чтобы ваш ключ из нескольких столбцов был первичным ключом.

Django лучше всего работает с суррогатными ключами, то есть автоматически определяет поле автоинкремента с именем id и устанавливает его в качестве первичного ключа. Это подходит почти для всех целей.

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

6 голосов
/ 02 февраля 2011

Он не встроен в Django (см. # 373 ), но для обсуждения смотрите основание http://code.djangoproject.com/wiki/MultipleColumnPrimaryKeys. Я скопировал раздел «Альтернативные методы» здесь для потомков.

Альтернативные методы

notnotpeter: в настоящее время вы можете «подделать» это, объявив один из ключей быть Первичный в Джанго и добавление уникального ограничение к модели. (нужно больше Информация о ... Примеры?)

mjm: это работает только когда есть не составной уникальный ключ для использования, если я понять, что предлагается здесь. Таким образом, это может быть работоспособным как способ сжать дизайн, который, естественно, имеет CKs в Django, но это бесполезно для работы с существующей схемой который имеет только CK.

djansoft: это можно сделать с помощью Уникально вместе.

Тобу: Вы не можете использовать только одну клавишу. используйте случай для иллюстрации: NamespacedTag? модель с CK из пространство имен и имя. Главная ключ не может быть просто пространством имен или только имя, так как это будет неоднозначный. Единственное решение (и я не нравится, так как это плохое моделирование и заставляет доступ к базе данных быть сериализован на счетчике), это использовать AutoField?.

toszter: Называй меня психом, но почему бы и нет? объявить любое количество столбцов как первичный ключ в вашей модели, который Затем Джанго использует для создания «скрытого» столбец pk_composite, это просто хеш из трех значений ПК в строке? Когда вы делаете поиск на ПК, вы примите ВСЮ комбинацию значения является первичным ключом, ничего более менее. Итак, когда вы смотрите вверх в соответствии со значениями, необходимыми для создать полный pk_composite, хэш всегда вычисляет и если хеш алгоритм общедоступен, может быть отключен URL, строка запроса в дБ поиски, и где угодно. Кажется довольно простым, на мой взгляд, но опять же я не буду в великом подробно здесь.

При этом я бы создал ID на столе и сделал бы его первичным ключом. Затем добавьте уникальное ограничение на user_id + timestamp.

2 голосов
/ 02 февраля 2011

Если ключ должен состоять из одного столбца:

Идентификатор добавляется "из коробки" (variable.id), а для текущего времени просто добавьте

from django.db import models

date = models.DateTimeField( auto_now_add=True)

в yourapp / models.py

, поэтому у вас есть 2 значения, и вы можете сделать ключ в любой форме.

, если вы хотите использовать клавишу с несколькими столбцами, прочитайтедругой ответ.Надеюсь помочь вам.

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