Python Django JsonField到表单

Python Django JsonField到表单,python,django,django-forms,django-jsonfield,Python,Django,Django Forms,Django Jsonfield,我已经搜索了几天,试图找到一种干净利落的方法,使用django的内置验证和表单呈现从JsonField创建动态表单。我还没有找到一个将django的验证和呈现结合起来的解决方案,所以我想为此创建一个模块,但我很难弄清楚这些类是如何工作的 我尝试了以下几种不同的方法: models.py forms.py 这是我得到的错误: 错误 它看起来像forms.Form子类forms.BaseForm和forms.DeclaritaveFieldsMetaclass,但我不知道如何将forms.Form子

我已经搜索了几天,试图找到一种干净利落的方法,使用django的内置验证和表单呈现从JsonField创建动态表单。我还没有找到一个将django的验证和呈现结合起来的解决方案,所以我想为此创建一个模块,但我很难弄清楚这些类是如何工作的

我尝试了以下几种不同的方法:

models.py forms.py 这是我得到的错误:

错误 它看起来像
forms.Form
子类
forms.BaseForm
forms.DeclaritaveFieldsMetaclass
,但我不知道如何将forms.Form子类化,以便从字典中传入动态字段。我还尝试了以下方法:

views.py 我不是在问一个答案,我真正想知道的是,有人是如何遍历所有这些类来找出如何对它们进行子类化的。我想我可以通过自己编写所有的逻辑、验证等来解决这个问题,但我希望这是一个其他人可以使用的模块

url.py 编辑
我最初是根据记忆输入代码的,但有一些打字错误。我从我的代码库中复制了代码并包含了url.py。

请查看此第三方软件包,然后将表单改写为

from entangled.forms import EntangledModelForm

class DynamicForm(EntangledModelForm):
    name = forms.CharField(max_length=25)
    number = forms.IntegerField()

    class Meta:
        model = Forklift
        entangled_fields = {'json_fields': ['name', 'number']}

然后,在使用标准Django表单时,按照通常的方式呈现表单。

我真的不知道forms.py的代码如何产生您显示的错误。但是您显然没有显示您正在运行的确切代码,因为它充满了语法错误(例如缺少冒号、大括号和会让任何人感到困惑的类名称)。请粘贴实际代码,然后我们可能会帮助查找错误。此外,如果您希望基于模型字段的内容构建表单,我假设您指的是该模型的特定实例。因此,如果您要将一个实例传递给表单的初始值设定项,为什么不在表单的
\uuuu init\uuu()
方法中创建字段呢?我不使用
\uuuu init\uuu()
方法的原因是我不知道如何做。你有什么建议我可以用吗?我已经尝试了几种不同的方法,上面的方法是我从内存中尝试的,因为我已经没有代码了。对此我深表歉意,我将在一分钟内用实际代码进行编辑。
from django import forms
from .models import Forklift

fields_dict = {
    'name': forms.CharField(max_length=25),
    'number': forms.IntegerField()
}

class ModelForm(forms.ModelForm):
    class Meta:
        model = Forklift
        exclude = ['json_fields']

class DynamicForm(forms.Form):
    pass
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
from django import forms
from django.shortcuts import render
from .forms import fields_dict

def dynamic_form(request): #__init_subclass__() takes no keyword arguments
    class NewForm(forms.BaseForm, fields=fields_dict): # also tried with fields=fields_dict
        pass
    form = NewForm(request.POST or None)
    return render(request, 'template.html', {'form': form})

def dynamic_form(request): # form will only render once then disappear
    content = {}
    context = {}

    dynamic_form = type('dynamic_form', (DynamicForm,), fields_dict)
    form = dynamic_form(content)

    context = {
        'form': form,
    }
    return render(request, 'activity/dynamic_form.html', context)


def dynamic_form(request): # module 'django.forms' has no attribute 'DeclaritaveFieldsMetaclass'
    class NewForm(forms.BaseForm, metaclass=DeclarativeFieldsMetaclass(MediaDefiningClass),  data=fields_dict):
        pass
    form = NewForm(request.POST or None)
    return render(request, 'template.html', {'form': form})
from django.urls import path

from .views import dynamic_form, test

urlpatterns = [
    path('form/', dynamic_form),
]
from entangled.forms import EntangledModelForm

class DynamicForm(EntangledModelForm):
    name = forms.CharField(max_length=25)
    number = forms.IntegerField()

    class Meta:
        model = Forklift
        entangled_fields = {'json_fields': ['name', 'number']}