Добавление нескольких моделей в inlineformset_factory - PullRequest
4 голосов
/ 15 октября 2010

У меня есть модель, подобная приведенной ниже.

class Content(SimpleModel):
    title = models.CharField(max_length=255)
    body = models.TextField()
    slug = models.SlugField(max_length=50)    

    def __unicode__(self):
        return self.title


class MediumStuff(models.Model):
    meta_value = models.TextField()
    meta_key = models.SlugField('Field Name', max_length=50, blank=True)
    content = models.ForeignKey(Content)

    def __unicode__(self):
        return self.slug


class SmallStuff(models.Model):
    text = models.CharField(max_length=60, blank=True, null=True)
    content = models.ForeignKey(Content)

Я хочу создать набор форм для контента, который имеет встроенные формы для моделей MediumStuff и SmallStuff, используя inlineformset_factory()

Iссылается на Документация Django , но в них есть пример работы с моделью с одним внешним ключом.

ContentFormSet = inlineformset_factory(Content, [MediumStuff, SmallStuff])

или

ContentFormSet = inlineformset_factory(Content, (MediumStuff, SmallStuff))

не сработало.

Поскольку возможно добавить несколько строк в админ, я считаю, что это можно сделать:)

СделатьУ вас есть какие-либо предложения / какие-либо ресурсы или советы?Или, может быть, скажите мне, где я должен смотреть, чтобы увидеть, как администратор обрабатывает несколько строк?

1 Ответ

3 голосов
/ 16 октября 2010

Просто создайте одну строку для каждой связанной модели:

MediumStuffInline = inlineformset_factory(Content, MediumStuff)

SmallStuffInline = inlineformset_factory(Content, SmallStuff)

Посмотрите, как работает админ. Каждая строка обрабатывается подклассом InlineModelAdmin [1]. Сама строка создается по методу get_formset() [2].

Ознакомьтесь с документацией о том, как использовать более одного набора форм в представлении [3] [4]

[1] http://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py#L228

[2] http://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py#L1243

[3] http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#using-an-inline-formset-in-a-view

[4] http://docs.djangoproject.com/en/1.2/topics/forms/formsets/#using-more-than-one-formset-in-a-view

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