Django - 元 class

Django - meta class

在修改元 class 以包含 unique_together 并尝试进行迁移时,我不断收到 "No changes detected",我认为这不是预期的行为。 错误 #1

我确实尝试删除了该特定模型的迁移和 makemigration,但仍然不包括此元 class 属性。

我实际上可以通过更改模型的其他方面然后手动编辑有效的 migration.py 来强制迁移。但是,当在 tabularinline 中使用模型并覆盖 save_formset 我得到 "Enum value with this Enum code already exists".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')]),
    ),
]

**管理员 - 表格内联**

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 v1.8.4

我认为原因是您的 enum_code 字段本身已经有 unique=True。因此,它与任何其他字段一起自动是唯一的,无需迁移,您的错误也得到了解释。

您的 EnumValue class 有 两个 Meta class。这就像重新分配变量一样:第一个 class 定义丢失,只保留第二个 class 定义。您需要将它们合并成一个 class.

class EnumValue(models.Model):
    ...
    class Meta:
        unique_together = (('enum_code', 'enum'),)
        ordering = ('lowercase_enum_value_en',)
        verbose_name_plural = 'Enum Values'

    def __unicode__(self):
        return self.enum_value_en