Как установить начальное значение для поля ManyToMany в Django? - PullRequest
1 голос
/ 25 марта 2010

Я использую 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 ]

2 голосов
/ 15 мая 2014

Хотя ответ mlissner может работать в некоторых случаях, я не думаю, что это то, что вы хотите. Ключевое слово «экземпляр» предназначено для обновления существующей записи.

Обращаясь к вашей попытке использовать ключевое слово "initial", просто измените строку на:

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

Я не проверял это с вашим кодом, но я использую что-то похожее в моем коде, и оно работает.

2 голосов
/ 25 марта 2010

ОК, я наконец понял это. Господи, иногда решения слишком просты.

Мне нужно сделать:

profileForm = ProfileForm(instance = userProfile)

Я сделал это изменение, и теперь все работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...