Opened 6 years ago
Closed 6 years ago
#29904 closed Bug (invalid)
Not Null CharField Doesn't generate DB constraint on Oracle
Reported by: | Vackar Afzal | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | 2.0 |
Severity: | Normal | Keywords: | Contraints |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Given the following model:
class User(models.Model): myField1 = models.CharField(max_length=20) myField2 = models.CharField(max_length=20, blank=True) myField3 = models.CharField(max_length=20, null=True, blank=True)
I would expect myField1 and field2 to have a db constraint assigned to ensure that they are not null.
However all columns are nullable upon inspection via 3rd party db tool.
Is this by design, or a genuine bug?
Change History (4)
comment:1 by , 6 years ago
Summary: | Not Null CharField Doesn't generate DB constrain on Oracle → Not Null CharField Doesn't generate DB constraint on Oracle |
---|
comment:2 by , 6 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
Type: | Uncategorized → Bug |
comment:3 by , 6 years ago
Resolution: | invalid |
---|---|
Status: | closed → new |
Thanks for the information. After reviewing however I would argue that this behaviour is invalid.
I agree that an empty string and a null value are under most circumstances interchangeable, but this is being conflated with the concept of nullability.
Nullability has nothing to do with the representation of the null, just wether or not the field may be null.
i.e If a column has a not null constraint, it should not accept an empty string or 'Null'
With Django's current behaviour, since declaring a field as not null has no effect, both 'Null' and may be inserted without issue.
I would argue that this is a broken design. How are raw queries enforced, or additional clients that have no knowledge of the Django's internal checks and conversions?
If Django needs to do internal checks, it should use the value of 'blank' and not 'null' to be consistent with other backends. Oracle supports not null constraints, why not exploit that?
comment:4 by , 6 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
I don't know much about the design decision but it dates to the beginning of the OracleBranch in 2006. If you want to revisit that decision, you should make a proposal on the DevelopersMailingList so it'll reach a wider audience. This should include at least a description of the change you're proposing and the backwards compatibility considerations. If you can put together a patch to demonstrate that your idea is feasible and passes Django's test suite, that will no doubt help your proposal. Thanks!
Please read NULL and empty strings.
In the future, please use the resources linked from TicketClosingReasons/UseSupportChannels to ask "is it a bug?" questions.