在django中如何设置ManyToMany字段的初始值? [英] How do you set the initial value for a ManyToMany field in django?

查看:102
本文介绍了在django中如何设置ManyToMany字段的初始值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用一个ModelForm来创建一个表单,并且我已经获得了窗体中除了一个ManyToMany字段之外的每个字段设置的初始值。



我明白,我需要给它一个列表,但我不能让它工作。我现在的代码是:

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

但这不行。我在这里缺少一些东西吗?



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

 #一个持有和处理酒吧会员资格的课程。 
class BarMembership(models.Model):
barMembershipUUID = models.AutoField(每个条形成员的唯一ID,
primary_key = True)
barMembership = USStateField(

def __unicode __(self):
return self.get_barMembership_display()

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

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

 #使用我们需要的字段扩展User类的类。 
class UserProfile(models.Model):
userProfileUUID = models.AutoField(每个用户配置文件的唯一ID,
primary_key = True)
user = models.ForeignKey用户
verbose_name =该模型扩展的用户,
unique = True)
雇主= models.CharField(用户的雇主,
max_length = 100,
blank = True)
barmembership = models.ManyToManyField(BarMembership,
verbose_name =用户持有的酒吧会员资格,
blank = True,
null = True)

希望这有帮助。

解决方案

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



我需要做:

  profileForm = ProfileForm = userProfile)

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


I am using a ModelForm to create a form, and I have gotten the initial values set for every field in the form except for the one that is a ManyToMany field.

I understand that I need to give it a list, but I can't get it to work. My code in my view right now is:

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

But that doesn't work. Am I missing something here?

Per request in the comments, here's the relevant parts of my model:

# 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"]

And the user profile that's being extended:

# 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)

Hope this helps.

解决方案

OK, I finally figured this out. Good lord, sometimes the solutions are way too easy.

I need to be doing:

profileForm = ProfileForm(instance = userProfile)

I made that change, and now everything works.

这篇关于在django中如何设置ManyToMany字段的初始值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆