我有以下模型A,B和C的结构。
class A(models.Model):
id = models.IntegerField(primary_key=True, editable=False)
name = models.CharField(_('Name'), max_length=40)
...
...
class B(models.Model):
id = models.IntegerField(primary_key=True, editable=False)
a = models.OneToOneField(A, verbose_name=_('A'), on_delete=models.CASCADE)
class C(models.Model):
id = models.IntegerField(primary_key=True, editable=False)
a = models.ForeignKey(A, verbose_name=_('A'), on_delete=models.CASCADE)
b = models.ForeignKey(B, verbose_name=_('A'), on_delete=models.CASCADE)
name = models.CharField(_('Name'), max_length=40)
number = models.IntegerField(_('Number'))
created = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta:
unique_together = ('b', 'name', 'number')
以下是C表的模型表格和表格内联管理员的代码。
class CForm(forms.ModelForm):
class Meta:
model = C
exclude = ['created',]
widgets = {
'b': forms.HiddenInput,
}
class CInline(admin.TabularInline):
model = C
form = CForm
classes = ['collapse']
fields = ('name', 'number', 'b', )
readonly_fields = ('created', )
extra = 0
def has_delete_permission(self, request, obj=None):
return False
之后我将CInline类注册为模型A的Admin中的内联,如下面的代码所示。
class AAdmin(admin.ModelAdmin):
inlines = [B, CInline]
我能够在模型A的管理界面中看到内联部分并保存,但是当我打开它进行更改并单击保存按钮时,字段中有/没有任何更改它会引发验证错误C with this name, number and b already exists.
即使我们没有更改任何字段,我也不知道为什么它会在更改表单中引发验证错误。
如果我从内联中删除CInline,那么它正在按预期工作。
如何处理这种情况?