Wenn ich eine Meta-Klasse ändere, um eine unique_together einzufügen und Makemigrationen zu versuchen, bekomme ich "No changes detected", was vermutlich kein erwartetes Verhalten ist. ERROR # 1Django - Metaklasse
Ich habe versucht und die Migration für das jeweilige Modell und makemigration zu entfernen, aber das beinhaltet noch nicht dieses Meta-Klasse-Attribut.
Ich kann eine Migration tatsächlich erzwingen, indem ich andere Aspekte des Modells ändere und dann die migration.py manuell bearbeite, die funktioniert. Wenn ich jedoch das Modell in einer tabellarischen Zeile verwende und das save_formset überschreibe, bekomme ich den "Enum-Wert mit diesem Enum-Code existiert bereits". ERROR # 2
Dirty message: Unique constraint screenshot
Model.py
class EnumValue(models.Model):
enum_code = models.CharField(max_length=16, unique=True)
enum_value_en = models.CharField(max_length=40, verbose_name='English VALUE')
lowercase_enum_value_en = models.CharField(max_length=500, db_index=True)
enum = models.ForeignKey(Enum, db_index=True, verbose_name='Enum')
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)
created_by = models.ForeignKey(User, related_name='enumvalue_created_by_user')
modified_by = models.ForeignKey(User, related_name='enumvalue_updated_by_user')
class Meta:
unique_together = (('enum_code', 'enum'),)
ordering = ('lowercase_enum_value_en',)
def __unicode__(self):
return self.enum_value_en
class Meta:
verbose_name_plural = 'Enum Values'
Migration.py
class Migration(migrations.Migration):
dependencies = [
('dq', '0031_enum_enumvalue'),
]
operations = [
migrations.AlterUniqueTogether(
name='enumvalue',
unique_together=set([('enum_code', 'enum')]),
),
]
** Admin - tabularinline **
def save_formset(self, request, form, formset, change):
if formset.is_valid: # ensures no blank forms are submitted
instances = formset.save(commit=False) # gets instance from memory and add to it before saving it
for obj in formset.deleted_objects:
obj.delete()
for instance in instances:
instance.modified_by = request.user
instance.created_by = request.user
instance.lowercase_enum_value_en = instance.enum_value_en.lower() # no need to get clean data from "form"
instance.save()
formset.save()
Ich verwende Django v1.8.4
Dies kann durch viele Dinge verursacht werden, Ihr Beitrag ist zu breit. Überprüfen Sie zuerst, welche Migrationen mit 'manage.py showmigratons' gemacht wurden. Wenn Sie in der Vergangenheit eine Migration mit demselben Namen wie Ihre aktuelle Migration durchgeführt haben, wird die Datenbank davon ausgehen, dass sie bereits erstellt wurde. – Siegmeyer
showmigrations schlägt keinen doppelten Namen vor. Wenn ich Makemigrationen mache, würde ich erwarten, dass der Metaklassenwechsel als Veränderung erkannt wird, und das ist nicht mein zugrunde liegendes Problem. Im Wesentlichen frage ich, ob eine Änderung an der Metaklasse eine neue Migration auslösen würde (Fehler # 1) und weil ich die Migration manuell gehackt habe, verursacht dies wiederum den anderen Fehler, den ich als # 2 markiert habe. Danke vielmals. –