#31788: Models migration with change field foreign to many and deleting unique
together.
----------------------------+--------------------------------------
     Reporter:  budzichd    |                    Owner:  nobody
         Type:  Bug         |                   Status:  new
    Component:  Migrations  |                  Version:  3.0
     Severity:  Normal      |               Resolution:
     Keywords:              |             Triage Stage:  Unreviewed
    Has patch:  0           |      Needs documentation:  0
  Needs tests:  0           |  Patch needs improvement:  0
Easy pickings:  0           |                    UI/UX:  0
----------------------------+--------------------------------------
Description changed by budzichd:

Old description:

> I have models like
>
> {{{
> class Authors(models.Model):
>
>     project_data_set = models.ManyToManyField(
>         ProjectDataSet,
>         on_delete=models.PROTECT
>     )
>     state = models.IntegerField()
>     start_date = models.DateField()
>
>     class Meta:
>          unique_together = (('project_data_set', 'state', 'start_date'),)
> }}}
>
> and
>
> {{{
> class DataSet(models.Model):
>     name = models.TextField(max_length=50)
>

> class Project(models.Model):
>     data_sets = models.ManyToManyField(
>         DataSet,
>         through='ProjectDataSet',
>     )
>     name = models.TextField(max_length=50)
>

> class ProjectDataSet(models.Model):
>     """
>     Cross table of data set and project
>     """
>     data_set = models.ForeignKey(DataSet, on_delete=models.PROTECT)
>     project = models.ForeignKey(Project, on_delete=models.PROTECT)
>
>     class Meta:
>         unique_together = (('data_set', 'project'),)
> }}}
>
> when i want to change field project_data_set in Authors model from
> foreign key field to many to many field I must delete a unique_together,
> cause it can't be on many to many field.
> Then my model should be like:
>
> {{{
> class Authors(models.Model):
>
>     project_data_set = models.ManyToManyField(
>         ProjectDataSet,
>     )
>
>     state = models.IntegerField()
>     start_date = models.DateField()
> }}}
>
> But when I want to do a migrations.
> 1. python3 manage.py makemigrations
> 2. python3 manage.py migrate
> I have error:
> {{{ValueError: Found wrong number (0) of constraints for
> app_authors(project_data_set, state, start_date)}}}
> The database is on production, so I can't delete previous initial
> migrations, and this error isn't depending on database, cause I delete it
> and error is still the same.
> My solve is to first delete unique_together, then do a makemigrations and
> then migrate. After that change the field from foreign key to many to
> many field, then do a makemigrations and then migrate.
> But in this way I have 2 migrations instead of one.
>
> I add attachment with this project, download it and then do
> makemigrations and then migrate to see this error.

New description:

 I have models like

 {{{
 class Authors(models.Model):

     project_data_set = models.ManyToManyField(
         ProjectDataSet,
         on_delete=models.PROTECT
     )
     state = models.IntegerField()
     start_date = models.DateField()

     class Meta:
          unique_together = (('project_data_set', 'state', 'start_date'),)
 }}}

 and

 {{{
 class DataSet(models.Model):
     name = models.TextField(max_length=50)


 class Project(models.Model):
     data_sets = models.ManyToManyField(
         DataSet,
         through='ProjectDataSet',
     )
     name = models.TextField(max_length=50)


 class ProjectDataSet(models.Model):
     """
     Cross table of data set and project
     """
     data_set = models.ForeignKey(DataSet, on_delete=models.PROTECT)
     project = models.ForeignKey(Project, on_delete=models.PROTECT)

     class Meta:
         unique_together = (('data_set', 'project'),)
 }}}

 when i want to change field project_data_set in Authors model from foreign
 key field to many to many field I must delete a unique_together, cause it
 can't be on many to many field.
 Then my model should be like:

 {{{
 class Authors(models.Model):

     project_data_set = models.ManyToManyField(
         ProjectDataSet,
     )

     state = models.IntegerField()
     start_date = models.DateField()
 }}}

 But when I want to do a migrations.
 1. python3 manage.py makemigrations
 2. python3 manage.py migrate
 I have error:
 {{{ValueError: Found wrong number (0) of constraints for
 app_authors(project_data_set, state, start_date)}}}
 The database is on production, so I can't delete previous initial
 migrations, and this error isn't depending on database, cause I delete it
 and error is still the same.
 My solve is to first delete unique_together, then do a makemigrations and
 then migrate. After that change the field from foreign key to many to many
 field, then do a makemigrations and then migrate.
 But in this way I have 2 migrations instead of one.

 I added attachment with this project, download it and then do
 makemigrations and then migrate to see this error.

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/31788#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/066.e3b451de838fb7389140c971ac432a0e%40djangoproject.com.

Reply via email to