Django有限状态机与FSMKeyField保存形式

2024-10-01 11:32:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经实现了django fsm的FSMKeyFieldas 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

并通过fixture将states填充到ClaimState模型中,并使用来自另一个模型的FSMKeyField指针:

^{pr2}$

外键在Django shell中工作正常-我可以:

^{3}$

没问题。但是,当我试图从Django管理员或我自己的表单保存索赔时,我得到了一个错误:

claim state instance with id <ClaimState: Rejected> does not exist.

如果我查看source,我可以看到下拉列表的值是PKs,所以不清楚它为什么把整个对象当作ID来对待

不知道是什么原因造成的还是最好的解决方法?在

enter image description here


Tags: django模型selfidmodelslengthlabelmax
1条回答
网友
1楼 · 发布于 2024-10-01 11:32:52

我今天遇到了同样的问题,并通过为模型的admin指定一个自定义表单并重写state属性的clean函数来解决它。在

在您的情况下,这可能看起来像:

class ClaimAdminForm(forms.ModelForm):
    def clean_state(self):
        return self.cleaned_data["state"].id


@admin.register(Claim)
class ClaimAdmin(admin.ModelAdmin):
    form = ClaimAdminForm

相关问题 更多 >