Bagaimana menerapkan bahwa hanya satu objek, dari semua objek, dari suatu Model yang memiliki nilai tertentu untuk suatu bidang

Saya sedang menulis model ModelX dan akan ada beberapa obj1, obj2 dll untuk itu

ModelX memiliki bidang bidangX

Saya ingin memastikan bahwa untuk semua obj1, obj2, obj3 dll, hanya ada satu yang memiliki fieldX = "XXX", dan tidak ada yang memiliki

Saya dapat menempatkan pernyataan di pre_save() atau post_save(), tetapi apakah ada cara yang lebih bersih untuk melakukan ini di tingkat basis data, sehingga menimbulkan IntegrityError?

Terima kasih

memperbarui

Saya memiliki model Tautan, yang memiliki kunci asing untuk Pengguna, access_token = bidang teks, dan bool is_active

Saya ingin menerapkannya kapan saja, untuk objek Tautan untuk pengguna tertentu, hanya nol atau satu objek yang dapat memiliki is_active True, dan sejumlah objek dapat memiliki is_active = False


person dowjones123    schedule 16.09.2014    source sumber


Jawaban (2)


Batasan UNIK berfungsi untuk nilai Benar dan Salah. Jika Anda benar-benar ingin menggunakannya, Anda harus membuat bidang is_active dapat dibatalkan dan menggunakan Tidak Ada (NULL) alih-alih False, karena dua NULL tidak dianggap sama (setidaknya di PostgreSQL dan MySQL).

person Tomasz Zieliński    schedule 16.09.2014

Ya, gunakan opsi bidang 'unik' dalam definisi model https://docs.djangoproject.com/en/dev/ref/models/fields/#unique

person hellsgate    schedule 16.09.2014
comment
obj1.FieldX = XXX, obj2.FieldX = YYY , obj3.FieldX = YYY harus diizinkan dalam kasus saya, tetapi unik tidak akan mengizinkannya - person dowjones123; 16.09.2014
comment
@ dowjones123 mungkin Anda harus menjelaskan lebih banyak apa yang ingin Anda capai? - person jonrsharpe; 16.09.2014
comment
Saya telah memperbarui posting asli saya untuk memberikan ide yang lebih baik. Terima kasih sebelumnya - person dowjones123; 16.09.2014