时间:2011-02-08 20:34:28

标签: python django django-forms

我有一个带有外键的模型组(其他字段无关紧要):

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(如果我不在通用视图中)来执行此操作。有没有办法用通用视图执行此操作,还是需要使用常规视图传递该值?

2 个答案:

答案 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中):

http://code.djangoproject.com/svn/django/branches/releases/1.2.X/django/views/generic/create_update.py