Скрыть поле модели django и создать его самостоятельно при отправке формы - PullRequest
1 голос
/ 27 марта 2020

У меня есть модель со следующими полями: alert_text, next_run (в следующий раз появится предупреждение)

next_run автоматически заполняется мной (я не хочу, чтобы пользователь заполнял это) поэтому я скрываю это так:

#admin.py
class AlertForm(forms.ModelForm):
    class Meta:
        model = Alert
        fields =  '__all__'



class AlertAdmin(admin.ModelAdmin):
    form = AlertForm
    fields = ['alert_text']

admin.site.register(Alert,AlertAdmin)

Проблема в том, что теперь я не могу найти способ добавить его в модель при создании. и я получаю сообщение об ошибке:

'AlertForm' has no field named 'next_run'.

это модель. (

1 Ответ

3 голосов
/ 27 марта 2020

Во-первых, вам не нужен класс AlertForm.

Вы можете просто определить AlertAdmin в своем файле admin.py следующим образом:

class AlertAdmin(admin.ModelAdmin):

    list_display = ('alert_text', 'next_run',)
    exclude = ('next_run',)

, а затем зарегистрировать Класс AlertAdmin с этой строкой в ​​вашем файле admin.py.

admin.site.register(Alert, AlertAdmin)

Затем в вашем определении модели Alert переопределите метод сохранения ... например:

class Alert(models.Model):
    alert_text= models.CharField(max_length=200)
    next_run = models.DateTimeField()

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):

        self.next_run = datetime.datetime.now()
        super(Alert, self).save(force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...