@niyazovds

Как добавить, изменить, вывести поля форм на Django?

Привет, читающему данный пост!
Меня попросили добавить SEO поле в админке Django, потому что я "Тыжпрограммист". Но я в нем не очень шарю и прошу вашей помощи. Ибо я больше по фронт-энду.

В админке все разбито по модулям и связано между собой. Есть раздел 'Круизы'' в нем Локации, Картинки, сами Круизы, SEO и т.д. Думаю, с примером будет понятнее...

Например: добавляю страницу круиза "Example 1" в категории "Location 1", при добавлении SEO форм нет. Сохранил и иду в раздел SEO заполняю форму и в конце выбираю из списка (там html select) "Example 1" + ниже есть чекбокс "Listing" ( допустим я нажал на него) и сохранил. В SEO есть выбор только круизов, категорий нет.

Теперь, если я перейду на сайте в Example 1 появятся SEO данные, и они же появятся на странице раздела сайта Location 1, Location 2, Location 3 и т.д., т.к. я выбрал чекбокс "Listing" . Если не выбирать Listing, то на странице с локациями исчезнет SEO.

Что требуется?
Нужно в разделе SEO добавить возможность выбора категорий с локациями, чтобы и Location 1, Location 2, Location 3 и т.д. имели свое уникальное описание.

Я сам пытался сделать, даже получалось вывести локации, но итог всегда 500 ошибка на сайте или невозможно сохранить seo форму....

models.py
class SEO(models.Model):
    title = I18nTextField(_('SEO Title'))
    description = I18nTextField(_('SEO Description'))
    keywords = I18nTextField(_('SEO Keywords'))
    index = models.BooleanField(default=True)
    cruise = models.ForeignKey(Cruise, on_delete=models.CASCADE, verbose_name='Cruise')
    listing = models.BooleanField(default=False)

    def __str__(self):
        return self.title[LANGUAGE_CODE]

views.py
def get_cruise_locations():
    return CruiseLocation.objects.order_by('order').values_list(named=True).all()


def listing(request, cruise_location=None):
    cruise_locations = get_cruise_locations()
    if cruise_locations.__len__() == 0:
        return redirect('index')
    if cruise_location is None:
        return redirect('cruises_listing', cruise_location=cruise_locations[0].slug)

    cruises = Cruise.objects.filter(location__slug=cruise_location).select_related('schedule').all()

    goldenCruise = []

    for cruise in cruises:

        if request.user.is_authenticated and request.user.is_agency:
            ag_price_obj = AgencyPrice.objects.filter(agency_id=request.user.id, is_active=True).first()
            if ag_price_obj is not None:
                cruise.price = ag_price_obj.price.real

        goldenCruise.append({
            'cruise': cruise,
            'image': get_image_through_proxy(
                get_image_by_user_agent(request, cruise.cruise_listing_image.image)
            )
        })

    return render(request, "cruises/listing.html", {
        'locations': cruise_locations,
        'active_location': cruise_location,
        'cruises': goldenCruise,
        'lang': get_language(),
        'administration_phone_objects': get_administration_phone_objects(),
        'administration_email_objects': get_administration_email_objects(),
        'yacht_objects': get_yachts(),
        'site_rules_objects': get_site_rules_objects(),
        'header_links': get_header_links(request),
        'counters': get_counters(),
        'seo': SEO.objects.filter(listing=True).first()
    })

def cruise(request, cruise_location, cruise_slug):
    cruise_selected = Cruise.objects.filter(location__slug=cruise_location, slug=cruise_slug).select_related('schedule').first()
    cruise_images = CruiseImage.objects.filter(cruise=cruise_selected, is_active=True).order_by('order').all().values_list(named=True)

    gallery = []
    for image in cruise_images:
        gallery.append({
            'image': get_image_through_proxy(image.image.get('Desktop_1920'))
        })

    if request.user.is_authenticated and request.user.is_agency:
        ag_price_obj = AgencyPrice.objects.filter(agency_id=request.user.id, is_active=True).first()
        if ag_price_obj is not None:
            cruise_selected.price = ag_price_obj.price.real

    return render(request, "cruises/cruise.html", {
        'seo': SEO.objects.filter(cruise_id=cruise_selected.id, listing=False).first(),
        'cruise': cruise_selected,
        'gallery': gallery,
        'lang': get_language(),
        'administration_phone_objects': get_administration_phone_objects(),
        'administration_email_objects': get_administration_email_objects(),
        'yacht_objects': get_yachts(),
        'site_rules_objects': get_site_rules_objects(),
        'header_links': get_header_links(request),
        'counters': get_counters()
    })
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы