我已经实现了django-fsm的FSMKeyField as documented
class ClaimState(models.Model):
id = models.CharField(primary_key=True, max_length=50)
label = models.CharField(max_length=255)
def __str__(self):
return self.label并且已经通过灯具使用状态填充了ClaimState模型,并且我正在使用来自另一个模型的FSMKeyField指针:
class Claim(models.Model):
state = FSMKeyField(ClaimState, default='new')
...外键在Django shell中工作得很好-我可以这样做:
s = ClaimState.objects.first()
Claim.objects.create(state=s)没问题。但是,当我尝试保存来自Django Admin或我自己的表单的声明时,我得到了错误:
claim state instance with id <ClaimState: Rejected> does not exist.如果我查看源代码,我可以看到下拉值是PK,所以不清楚为什么它将整个对象视为ID。
不确定是什么原因造成的,还是最好的解决方法?

发布于 2017-07-24 07:50:57
我今天遇到了同样的问题,并通过为模型的管理指定一个自定义表单并覆盖state属性的clean函数来解决它。
在您的示例中,可能如下所示:
class ClaimAdminForm(forms.ModelForm):
def clean_state(self):
return self.cleaned_data["state"].id
@admin.register(Claim)
class ClaimAdmin(admin.ModelAdmin):
form = ClaimAdminFormhttps://stackoverflow.com/questions/45227453
复制相似问题