добавить объект вместе со связанными объектами в той же форме в администраторе Django - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть эти модели:

class Gallery(models.Model):
   HeadImage = models.ImageField(upload_to="gallery") 

class Image(models.Model):
   Image = models.ImageField(upload_to="gallery")
   Gallery = models.ForeignKey(Gallery, related_name='images',blank=True)

class Agency(models.Model):
   # some fields ...
   Gallery=models.ForeignKey(Gallery)

Теперь я хочу, чтобы при добавлении агентства вместо простого тупого выпадающего списка для поля Галерея у меня были следующие вещи:

Aзагрузка файла для поля HeadImage в модели Gallery и набор загрузок файлов для поля Image в модели Image.Например, добавление объекта (агентства) со связанными объектами (галерея, связанная с агентством, и изображение, связанное с галереей) в одной форме.Как я могу это сделать?Я не нашел никакого решения после того, как много гуглил, это звучит ужасно.

edit: я имею в виду сохранить Glaaery с набором его изображений и сохранить агентство с его галереей в той же форме.

спасибо за любую помощь

1 Ответ

1 голос
/ 16 ноября 2011

Как я уже сказал в комментарии выше, вы пытаетесь сделать слишком много в администраторе Django.

Глядя на ваш другой вопрос , вы знакомы с инструментами, необходимыми для написания собственного представления. Определите модельные формы для ваших моделей. Поместите их в тот же тег формы в вашем шаблоне. Если форма действительна, сохраните с помощью commit=False, затем исправьте внешние ключи.

Вот скелетное представление для сложения Agency и Gallery вместе. Вы можете легко добавить набор изображений одновременно.

def add_agency(request):
    if request.method == "POST":
        agency_form = AgencyForm(data=request.POST, prefix="agency")
        gallery_form = GalleryForm(data=request.POST, prefix="gallery")
        if agency_form.is_valid() and gallery_form.is_valid():
            gallery = gallery_form.save()
            agency = agency_form.save(commit=False)
            agency.gallery = gallery
            agency.save()
            return HttpResponseRedirect(next_url)
    else:
        # left as an exercise

Если вы хотите двухэтапную форму, я рекомендую вам взглянуть на формуляра. Это отдельное приложение для Django <= 1.3.X], и <a href="https://docs.djangoproject.com/en/dev/ref/contrib/formtools/form-wizard/" rel="nofollow noreferrer"> включает в Django> = 1.4.

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