按照Kevin Dias在本文中的说明,我尝试为两个相关模型生成一个表单.这似乎适用于一对多的关系,但是我遇到了使用多对多关系的问题.
以下是用户角色管理的一些示例代码:
#models.py
from django.db import models
class Role(models.Model): # for each role there can be multiple users
role_name=models.CharField(max_length=20)
class User(models.Model): # each user can have multiple roles
name=models.CharField(max_length=20)
role=models.ManyToManyField(Role, through='UserRole')
class UserRole(models.Model): # table to store which user has which roles
role=models.ForeignKey(Role)
user=models.ForeignKey(User)
# forms.py
from django.forms import ModelForm
from django.forms.models import inlineformset_factory
from rightmanagement.models import Role, User
class UserForm(ModelForm):
class Meta:
model = User
RoleFormSet = inlineformset_factory(User, Role) # this is probably the line that …
Run Code Online (Sandbox Code Playgroud) 我希望从对象获得绑定表单以使用is_valid方法.原因是我有一些旧数据,我希望用户根据新的验证规则进行更正.然后,我想在我的表单中重用clean方法的代码.
我最终序列化了我的回复:
from django.utils import simplejson
from django.core.serializers import serialize
(...)
fields_dict = simplejson.loads(serialize('json', [obj]))[0]['fields']
form = forms.MyForm(fields_dict)
if form.is_valid
Run Code Online (Sandbox Code Playgroud)
这可行,但它似乎不是很Djangish.此外,它似乎是一个常见的问题,所以我正在寻找一个更好的方法来做到这一点.
根据文档,从未绑定到未绑定的转换数据不会发生:https: //docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method 但是,这将是最简单的解决方案为了我.