我有一个带有外键的模型组(其他字段无关紧要):
class Project(models.Model) :
group = models.ForeignKey(Group)
...
我有这个模型的模型表单:
class AddProjectForm(forms.ModelForm):
class Meta:
model = Project
fields = ["group","another"]
在我的网址中,我在一般视图中使用它:
(r'^$', create_object, {'form_class':AddProjectForm, 'template_name':"form.html", 'login_required':True, 'extra_context':{'title':'Add a Project'}}),
一切正常,但我希望组字段只显示当前用户所属的组,而不是所有可用的组。我通常通过将用户传递给模型表单并覆盖init(如果我不在通用视图中)来执行此操作。有没有办法用通用视图执行此操作,还是需要使用常规视图传递该值?
答案 0 :(得分:2)
这看起来很脏,因为通用视图实例化了没有参数的form_class。如果您真的想要使用generic_view,那么您必须动态生成该类:S
def FormForUser(user):
class TmpClass(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(TmpClass, self).__init__(*args, **kwargs)
self.fields['group'].queryset = user.group_set.all()
class Meta:
model = Project
fields = ['group', 'another']
然后包装创建对象视图
@login_required # Only logged users right?
def create_project(request):
user = request.user
form_class = FormForUser(user)
return create_object(request, form_class=form_class, ..... )
我的建议是编写自己的视图,它会给你更多的长期控制权,这是一个微不足道的观点。
答案 1 :(得分:0)
不,你需要定期观看。通过查看create_object()的源代码可以看出,没有功能可以将额外的参数传递给modelform(在django 1.2中):