2010-02-01 81 views
0

我的问题涉及到这样一个问题:Default ordering for m2m items by intermediate model field in Django在Django模型中使用python属性?

class Group(models.Model): 
    name = models.CharField(max_length=128) 
    _members = models.ManyToManyField(Person, through='Membership') 
    @property 
    def members(self): 
     return self._members.order_by('membership__date_joined') 

    def __unicode__(self): 
     return self.name 

我用过的最好的答案的解决方案,你在这里看到的,但是,它打破了是基于模型组我的模型形式。

当我提交表单时,我的模型表单的错误列表中需要_members,因为该字段是必需的,不能再根据此模型提交表单。

上述问题中的最佳答案提示了一种模拟使用该属性的字段行为的方法。我将如何去做这个来完全隐藏模型表单中的成员?

感谢, 皮特

+1

链接到相关问题是很好的,但是如果你确实知道你有什么,有什么,以及你得到的错误是非常有用的。 – 2010-02-01 17:39:36

+0

你可以发布你的表单的样子吗?这可能有助于我们缩小范围。 – 2010-02-01 20:14:09

回答

0

如果它是一次性的,你可以在创建的ModelForm排除_members领域:

class GroupForm(ModelForm): 
    class Meta: 
     model=Group 
     exclude = {'_members',} 

如果你这样做了很多,你可以考虑创建ModelForm的子类并覆盖init方法以自动排除以下划线开头的属性。

+0

我看到你正试图处理一个django错误。我怀疑一个属性不是你想要的,因为ModelForms不知道python属性是什么。要实际处理此问题,您可能需要向模型表单添加一个自定义字段,然后通过覆盖init方法来填充成员选项,例如在此示例中: http://stackoverflow.com/questions/1387431/django-模型的ModelForm知识到获得动态 - 选择 - 在-choicefield – Sam 2010-02-01 19:22:51