При внесении изменений в класс meta для включения unique_together и попыток makemigrations, я продолжаю получать «Обнаруженные изменения», которые, как я предполагаю, не ожидается. ERROR # 1Django - meta class
Я попытался и удалить миграцию для этой конкретной модели и makemigration, но которые до сих пор не включает этот мета атрибут класса.
Фактически я могу заставить миграцию изменить другие аспекты модели, а затем вручную отредактировать файл migration.py, который работает. Однако при использовании модели в tabularinline и переопределении save_formset я получаю «значение Enum с этим кодом Enum уже существует». 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')]),
),
]
** Админ - 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()
Я использую Django версию 1.8.4
Это может быть вызвано многими вещами, ваш пост слишком широк. Прежде всего, проверьте, какие миграции были сделаны с помощью 'manage.py showmigratons'. Если вы перенесли миграцию в прошлом с тем же именем, что и текущая миграция, база данных будет думать, что она уже сделана. – Siegmeyer
showmigrations не предлагает дублировать имя. Когда я планирую, я ожидал бы, что изменение метакласса будет обнаружено как изменение, и это не является моей основной проблемой. В сущности, я прошу, чтобы изменение метакласса вызвало новую миграцию (ошибка №1), и поскольку я вручную взломал миграцию, это, в свою очередь, вызывает другую ошибку, отмеченную мной как # 2. Большое спасибо. –