Заполните пустые обязательные поля в Django admin перед сохранением и перед проверкой - PullRequest
0 голосов
/ 14 марта 2020

У меня есть модель «Производство» и модель «Шоу». «Production» имеет внешний ключ, связывающий его с конкретным показом c.

В админке у пользователя есть возможность заполнить заголовок продукции. В настоящее время это обязательное поле. Однако, если пользователь оставит это поле пустым, я хочу, чтобы его можно было заполнить автоматически, основываясь на заголовке «Показывать чужой ключ».

Я написал функцию, которая переопределяет сохранение и делает это возможным. Однако он не может быть запущен, потому что если пользователь оставляет поле пустым, администратор Django сообщает ему «Это поле обязательно», прежде чем разрешить запуск функции сохранения.

Как я могу предотвратить это? Я не хочу делать поля null = True, пустыми = True в самой модели, потому что я все еще хочу, чтобы это поле всегда заполнялось.

Код ниже (биты убраны для ясности):

@admin.register(Production)
class ProductionAdmin(admin.ModelAdmin):
    inlines = [
        RoleInLine,
        CreativeRoleInLine,

    ]

    def has_change_permission(self, request, obj=None):
        if request.user.is_superuser:
            return True
        if obj is not None and obj.lead_producer != request.user.profile.creative:
            return False
        return True

    def save_model(self, request, obj, form, change):
        if not obj.title:
            obj.title = obj.show.title + " - " + obj.theatre.city.name + " Production"
        obj.save()


class Production(models.Model):
    """Model definition for MODELNAME."""
    show = models.ForeignKey(Show, related_name="show",on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    subheading = models.CharField(max_length=100,null=True,blank=True)
    theatre = models.ForeignKey(Theatre, related_name='theatre', on_delete=models.CASCADE,null=True,blank=True)



...