Apakah ada cara untuk mendefinisikan beberapa bidang sebagai unik di Django?
Saya memiliki daftar volume (jurnal) dan saya tidak ingin lebih dari satu nomor volume untuk jurnal yang sama.
class Volume(models.Model):
id = models.AutoField(primary_key=True)
journal_id = models.ForeignKey(Journals, db_column='jid', null=True, verbose_name = "Journal")
volume_number = models.CharField('Volume Number', max_length=100)
comments = models.TextField('Comments', max_length=4000, blank=True)
Saya mencoba menempatkan unique = True
sebagai atribut di bidang journal_id
dan volume_number
tetapi tidak berhasil.
python
django
django-models
Giovanni Di Milia
sumber
sumber
UNIQUE
kendala harus melarang duplikasiNULL
nilai-nilai, tetapi memungkinkan beberapaNULL
nilai (lihat konsep wiscorp.com/sql_2003_standard.zip , Framework, hal. 22). Jika Anda ingin batasan unik Anda melarang beberapa nilai null, Anda mungkin melakukan sesuatu yang salah, seperti menggunakanNULL
sebagai nilai yang bermakna. Ingat, bidang nullable mengatakan, "Kami tidak selalu memiliki nilai untuk bidang itu, tetapi ketika kami melakukannya harus unik."unique_together
kendala? Misalnya - ketika saya ingin memiliki kolom mode menjadi unik dalam lingkup induknya? Nah, properti ini sebenarnya adalah sebuah tuple itu sendiri, lihat: docs.djangoproject.com/en/1.4/ref/models/options/... Jadi kendala Anda harus lebih eksplisit ditulis sebagai:unique_together = (('journal_id', 'volume_number',),)
.Django 2.2+
Menggunakan
constraints
fitur - fiturUniqueConstraint
lebih disukai daripada unique_together .Dari dokumentasi Django untuk
unique_together
:Sebagai contoh:
sumber
UniqueConstraint
tetapi saya menjadi anehpsycopg2.errors.DuplicateTable: relation "name_of_the_constraint" already exists
ketika saya beralih ke Postgres