如何在django中设置ManyToMany字段的初始值?

时间:2010-03-25 00:37:29

标签: django many-to-many

我正在使用ModelForm来创建表单,并且我已经为表单中的每个字段设置了初始值,除了那个是ManyToMany字段的字段。

我知道我需要给它一个列表,但我无法让它工作。我现在看来的代码是:

        userProfile = request.user.get_profile()
        employer = userProfile.employer
        bar_memberships = userProfile.barmembership.all()
        profileForm = ProfileForm(
            initial = {'employer': employer, 'barmembership' : bar_memberships})

但这不起作用。我在这里错过了什么吗?

评论中的每个请求,这是我模型的相关部分:

# a class where bar memberships are held and handled.
class BarMembership(models.Model):
    barMembershipUUID = models.AutoField("a unique ID for each bar membership",
        primary_key=True)
    barMembership = USStateField("the two letter state abbreviation of a bar membership")

    def __unicode__(self):
        return self.get_barMembership_display()

    class Meta:
        verbose_name = "bar membership"
        db_table = "BarMembership"
        ordering = ["barMembership"]

正在扩展的用户个人资料:

# a class to extend the User class with the fields we need.
class UserProfile(models.Model):
    userProfileUUID = models.AutoField("a unique ID for each user profile",
        primary_key=True)
    user = models.ForeignKey(User,
        verbose_name="the user this model extends",
        unique=True)
    employer = models.CharField("the user's employer",
        max_length=100,
        blank=True)
    barmembership = models.ManyToManyField(BarMembership,
        verbose_name="the bar memberships held by the user",
        blank=True,
        null=True)

希望这有帮助。

2 个答案:

答案 0 :(得分:2)

好的,我终于想通了。好主,有时解决方案太容易了。

我需要这样做:

profileForm = ProfileForm(instance = userProfile)

我做了那个改变,现在一切正常。

答案 1 :(得分:2)

虽然mlissner的回答可能在某些情况下有效,但我认为这不是你想要的。关键字" instance"用于更新现有记录。

请参阅您尝试使用关键字" initial",只需将该行更改为:

bar_memberships = userProfile.barmembership.all().values_list('pk', flat=True)

我没有使用您的代码对此进行测试,但我在代码中使用类似的东西并且它可以正常工作。