Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
2 Trả lời
9817 Lượt xem

I'm trying to weaken a sql unique constraint.
Let's say I have a Human model with name and gender fields. And the name must be unique.

sql_constraints = [('name_unique', UNIQUE(name), 'Error: Name must be unique!')]

What I want is, that the name has to be unique if the gender is female.
How to achieve that?

Can I do something like:

sql_constraints = [('human_check', CHECK(gender='female' AND UNIQUE(name) OR (gender='male'), 'Error: Females must have unique names!')]

Or should I write a custom constraint?
Any other suggestions? (Like splitting the model into Males and Females)

Thanks.

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Hi

Try this

_sql_constraints = [
    ('name_unique', 'CHECK (gender='female')',  'Error: Name must be unique!'),

]
Ảnh đại diện
Huỷ bỏ
Tác giả

Thx.

I have not tried that yet, but I'm quite sure this will only allow female humans.

Câu trả lời hay nhất

Hi, Try this.

_sql_constraints = [
    ('name_unique', 'CHECK (gender='female' AND name IS UNIQUE)',  'Error: Name must be unique!'),
]

Just a guess. Better go for custom _constraint.

Ảnh đại diện
Huỷ bỏ
Tác giả

I like both your suggestions.

But it seems that your sql constraint is not working (yet, no error).

Bài viết liên quan Trả lời Lượt xem Hoạt động
3
thg 5 24
40675
6
thg 12 23
65256
1
thg 3 19
10019
0
thg 2 16
4
0
thg 12 15
3265