#34979: inlineformset_factory sets max_num forms to one even though there is a
unique_together constraint
-------------------------------+--------------------------------------
Reporter: Evan Hallein | Owner: nobody
Type: Uncategorized | Status: new
Component: contrib.admin | Version: 3.2
Severity: Normal | Resolution:
Keywords: inline admin | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 1
-------------------------------+--------------------------------------
Description changed by Evan Hallein:
Old description:
> I have a unique_together primary key in one of my models. When adding an
> inline admin for that model, the interface only allows adding one new
> object. I have tracked it down to code in django/django/forms/models.py:
> {{{
> fk = _get_foreign_key(parent_model, model, fk_name=fk_name)
> # enforce a max_num=1 when the foreign key to the parent model is
> unique.
> if fk.unique:
> max_num = 1
> }}}
>
> this is my model (autogenerated from an existing database):
> class TrtMeasurements(models.Model):
> observation = models.OneToOneField('TrtObservations',
> models.DO_NOTHING, primary_key=True)
> measurement_type = models.ForeignKey(TrtMeasurementTypes,
> models.DO_NOTHING, db_column='measurement_type')
> measurement_value = models.FloatField()
> comments = models.TextField(blank=True, null=True)
>
> class Meta:
> managed = False
> db_table = 'trt_measurements'
> unique_together = (('observation', 'measurement_type'),)
>
> While this makes sense for a single unique primary key, it is the wrong
> behavior for a composite primary key.
>
> Is a fix needed in Django so multiple objects with unique_together
> primary keys can be added as inlines, or should this be done using custom
> code?
New description:
I have a unique_together primary key in one of my models. When adding an
inline admin for that model, the interface only allows adding one new
object. I have tracked it down to code in django/django/forms/models.py:
{{{
fk = _get_foreign_key(parent_model, model, fk_name=fk_name)
# enforce a max_num=1 when the foreign key to the parent model is
unique.
if fk.unique:
max_num = 1
}}}
this is my model (autogenerated from an existing database):
{{{
class TrtMeasurements(models.Model):
observation = models.OneToOneField('TrtObservations',
models.DO_NOTHING, primary_key=True)
measurement_type = models.ForeignKey(TrtMeasurementTypes,
models.DO_NOTHING, db_column='measurement_type')
measurement_value = models.FloatField()
comments = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'trt_measurements'
unique_together = (('observation', 'measurement_type'),)
}}}
While this makes sense for a single unique primary key, it is the wrong
behavior for a composite primary key.
Is a fix needed in Django so multiple objects with unique_together primary
keys can be added as inlines, or should this be done using custom code?
--
--
Ticket URL: <https://code.djangoproject.com/ticket/34979#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/0107018beabdc6a8-ef5a8a1f-cb81-4a70-a5a2-f1df99a9e3d4-000000%40eu-central-1.amazonses.com.