微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有超过22个字段的Playframework和Scala Slick元组

如何解决具有超过22个字段的Playframework和Scala Slick元组

我的案例类大约有26个数据库字段,但是scala和/或Scala Slick的限制为22个字段。

有没有办法打破这一限制?

我尝试过:Slick codegen & tables with > 22 columns

没有任何好的结果^^

谢谢。

更新

我尝试了示例,但出现了错误...

我的代码如下:

class QuestionForm(ModelForm):
    choices = forms.ModelMultipleChoiceField(queryset=Choice.objects.all(),widget=forms.CheckBoxSelectMultiple())

    class Meta:
        model = Question
        fields = ['choices']

    def __init__(self,*args,**kwargs):
        super(QuestionForm,self).__init__(*args,**kwargs)
        self.fields['choices'] = forms.ModelMultipleChoiceField(queryset=self.instance.choices_set,widget=forms.CheckBoxSelectMultiple())

但是我遇到了以下错误

enter image description here

更新

enter image description here

解决方法

想法是使用HList表示具有22列以上的表。

您不需要为此使用平滑/不整形,如果不需要,也不必使用代码生成,因为内置的Slick HList可与mapTo宏一起使用。

步骤是:

  1. 添加HList导入(并删除光滑/无形状的导入):

    import slick.collection.heterogeneous.{HList,HCons,HNil}
    import slick.collection.heterogeneous.syntax._
    
  2. 将您的*投影定义为:

    def * = (regulationId :: name :: etc... :: HNil).mapTo[RegulationModel]
    

Slick网站上现在有一个食谱部分来说明:https://scala-slick.org/doc/3.3.3/cookbook.html#mapping-more-than-22-fields

如果您想详细了解这22个限制,这里有更长的帖子:https://underscore.io/blog/posts/2016/10/11/twenty-two.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。