Django admin TabularInline «502 Bad Gateway» nginx преждевременно закрытое соединение - PullRequest
0 голосов
/ 27 мая 2020

Я видел много дискуссий по этому поводу, но ничего не помогло. Ниже я получаю сообщение об ошибке

*9 upstream prematurely closed connection while reading response header from upstream

Это происходит с моим административным представлением Django TabularInline. Все остальное работает абсолютно нормально.

Он работает, если я сделаю это изменение в TargetTabularInline,

fields = (‘reviewed’,)

Я считаю, что проблема в том, что у целевой модели есть внешний ключ человека в какой-то другой таблице. Вот где наступает тайм-аут. Посоветуйте, пожалуйста, как я могу это решить?

admin.py

class TargetTabularInline(admin.TabularInline):
    model = Target


class VideoAdmin(admin.ModelAdmin):
    inlines = [TargetTabularInline]
    list_display = ['title', 'source', 'reviewed', 'category', 'sfw']
    search_fields = ('title', 'category', 'source__name', 'reviewed', )

    class Meta:
        model = Video

admin.site.register(Video, VideoAdmin)

models.py

class Video(DFModel):
    source = models.ForeignKey(Source, models.DO_NOTHING)
    creator = models.ForeignKey(
        Creator, models.DO_NOTHING, blank=True, null=True)
    title = models.CharField(max_length=500)
    views = models.IntegerField(blank=True, null=True)
    likes = models.IntegerField(blank=True, null=True)
    dislikes = models.IntegerField(blank=True, null=True)
    tags = models.TextField(blank=True, null=True)
    upload_date = models.DateTimeField(blank=True, null=True)
    page_url = models.TextField(blank=True, null=True)
    video_url = models.TextField(blank=True, null=True)
    thumb_url = models.TextField(blank=True, null=True)
    sfw = models.BooleanField(blank=True, null=True)
    category = models.CharField(max_length=20, blank=True, null=True)
    reviewed = models.TextField(blank=True, null=True)
    severity = models.CharField(max_length=10, blank=True, null=True)
    origin = models.CharField(max_length=20, blank=True, null=True)
    organization_id = models.IntegerField(blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)

class Target(DFModel):
    person = models.ForeignKey(
        Person, models.DO_NOTHING, blank=True, null=True)
    video = models.ForeignKey(
        'Video', models.DO_NOTHING, blank=True, null=True)
    reviewed = models.TextField(blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)

    class Meta:
        db_table = ‘target'

1 Ответ

0 голосов
/ 27 мая 2020

Ваша модель человека (или создателя) может иметь слишком много записей, которые администратор пытается загрузить в раскрывающемся меню при просмотре определенной c записи на панели управления страницы сведений об администраторе, что вызывает слишком большую нагрузку на сервер.

Вы можете добавить это в класс VideoAdmin

raw_id_fields = ("creator",)
# OR
readonly_fields = ('creator',)

https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#django .contrib.admin.ModelAdmin.raw_id_fields https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#django .contrib.admin .ModelAdmin.readonly_fields

При этом не будет загружена вся таблица создателя, что снизит нагрузку на ваш сервер, и рабочие смогут бесплатно обрабатывать другие запросы сервера.

Добавьте это также своему целевому администратору, если в таблице Person слишком много записей.

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