#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.