Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 5, 2016 20:13:43

delfenes
Зарегистрирован: 2012-08-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа со скрытыми полями django-admin

Привет, всем!

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

Есть модель задания:

class PassTheTask(models.Model):
    name = models.ForeignKey(Task)
    text = models.TextField(u'Описание')
    time = models.DateTimeField(u'Дата и время сдачи задания', auto_now_add=True, null=True, blank=True)
Форма:
class PassForm(forms.ModelForm):
    class Meta:
        model = PassTheTask
        widgets = {'time': forms.HiddenInput()}
        fields = ['name', 'text', 'link']
вьюшка:
def passthetask(request):
    if request.method == 'POST':
        form = PassForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            text = form.cleaned_data['text']
            link = form.cleaned_data['link']
            messages.add_message(request, messages.INFO, 'Задание отправлено.')
            form.save()
        return render(request, 'game/task.html', {'form': form})
    else:
        form = PassForm()
    return render(request, 'game/task.html', {'form': form})
Сама форма в html:
	<form method="post" enctype="multipart/form-data" action="">
			{% csrf_token %}
		{{form.as_p}}
            <input type="hidden" name="time">
		<input type="submit" value="Сдать задание" />
		</form>

Админка:
class PassTheTaskForm(forms.ModelForm):
    STATUS_CHOICES = (
        ('WAIT', u'Ожидает проверки'),
        ('PASS', u'Сдано успешно'),
        ('VIEWED', u'Сдано не успешно')
    )
    status = forms.ChoiceField(choices=STATUS_CHOICES)
class PassTheTaskAdmin(ModelAdmin):
    fields = ('name', 'text'', 'status', 'time')
    list_display = ('name', 'status',)
admin.site.register(PassTheTask, PassTheTaskAdmin)

Когда time присутствует в filelds возникает ошибка: Unknown field(s) (time) specified for PassTheTask. Check fields/fieldsets/exclude attributes of class PassTheTaskAdmin.
Причем time может спокойно присутствовать в list_display и выводиться.

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

Офлайн

#2 Янв. 5, 2016 20:45:09

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Работа со скрытыми полями django-admin

А где Мета у PassTheTaskForm? Там должна быть указана модель и филды.

delfenes
Или может есть другой способ передавать время заполнения формы?
Зачем это надо то? Что серверная сторона сама не определит, когда в неё реквест свалился?
delfenes
редактированием скрытых полей
Вы не находите, что это оксюморон?



Офлайн

#3 Янв. 5, 2016 23:25:18

delfenes
Зарегистрирован: 2012-08-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа со скрытыми полями django-admin

Ок, как вытащить когда реквест свалился?

мне нужно чтобы админ сайта видел, когда задание сдано.

Отредактировано FishHook (Янв. 6, 2016 15:12:01)

Офлайн

#4 Янв. 6, 2016 15:09:58

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Работа со скрытыми полями django-admin

delfenes
Ок, как вытащить когда реквест свалился?
datetime.datetime.now()
неочевидно, я так понимаю?



Офлайн

#5 Янв. 6, 2016 15:12:12

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Работа со скрытыми полями django-admin

delfenes
мне нужно чтобы админ сайта видел, когда задание сдано
Так покажите ему, нахера делать поле скрытым, а потом спрашивать “как показать скрытое поле”.
Ответ очевиден: не скрывайте его!



Офлайн

#6 Янв. 6, 2016 15:21:16

delfenes
Зарегистрирован: 2012-08-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа со скрытыми полями django-admin

FishHook
Нет, не очевидно))))
datetime.datetime.now() выводит текущее время СЕЙЧАС! А мне нужно время создания записи ВПОЛНЕ КОНКРЕТНОЙ )))))) Чего я не поняла в вашем предложении?

Хорошо, предположим я не скрою это поле. Но зафиг пользователю инфа о времени создания записи?
Еще раз: у меня задания НА САЙТЕ отправляют ПОЛЬЗОВАТЕЛИ, а проверяет АДМИН в АДМИНКЕ!

Предлагайте другой способ. Я выше более подробно описала что мне нужно. Напишите, как правильно. Научите меня! Я с удовольствием послушаю ваше мнение, как нужно делать правильно!

Отредактировано delfenes (Янв. 6, 2016 15:24:00)

Офлайн

#7 Янв. 6, 2016 15:43:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Работа со скрытыми полями django-admin

delfenes

delfenes
А мне нужно время создания записи ВПОЛНЕ КОНКРЕТНОЙ
Встречный вопрос, на кой хрен у тебя в модели написано это
time = models.DateTimeField(u'Дата и время сдачи задания', auto_now_add=True, null=True, blank=True)
ну есть ведь у тебя уже auto_now_add. Наверное (я не знаю, у тебя видимо другая логика), фреймворк перед тем как создать запись в БД поместит в соответсвующее поле текущую дату и время, которые и будут датой и временем создания.
delfenes
Хорошо, предположим я не скрою это поле. Но зафиг пользователю инфа о времени создания записи?
Какому пользователю? Зачем ты показываешь админу и пользователю одинаковые формы?
Админу показывай, пользователю не показывай. Это разные формы! У админа своя, у пользователя своя. Или у тебя пользователь доступ в админку имеет?



Офлайн

#8 Янв. 6, 2016 16:21:32

delfenes
Зарегистрирован: 2012-08-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа со скрытыми полями django-admin

Так у меня с датой все норм. Она сохраняется! С моделью проблем нет.

Проблема посмотреть ее в админке админу. Почему я пользователям админку не показываю. Тут все норм. ЭЭЭ внимательно читай первый пост. Формы не одинаковые!

Для админки я беру данные из модели одной и основе нее же модели я строю форму (поля для формы). А как по-другому, если мне нужно именно эту модель заполнить?
У меня есть модель, на основе ее полей форма, которая показывается юзеру для заполнения задания. В админке из формы для админки PassTheTaskForm показывается данные введенные пользователем.

Добавила мета класс.

class PassTheTaskForm(forms.ModelForm):
    STATUS_CHOICES = (
        ('WAIT', u'Ожидает проверки'),
        ('PASS', u'Сдано успешно'),
        ('VIEWED', u'Сдано не успешно')
    )
    status = forms.ChoiceField(choices=STATUS_CHOICES)
    class Meta:
        model = PassTheTask
	exclude = ['',]
        fileds = ['name', 'text', 'link', 'status', 'time']
class PassTheTaskAdmin(ModelAdmin):
    form = PassTheTaskForm  
    fields = ('name', 'text', 'link', 'status', 'time') вот когда тут есть time ругается
    list_display = ('name', 'status', 'time') а когда тут нормально показывает!
admin.site.register(PassTheTask, PassTheTaskAdmin)

Тогда такой вопрос, а не потому ли оно ругается что поле time не объявлено в PassTheTaskForm? Хотя это же обычное поле модели. Не могу понять почему возникает ошибка: Unknown field(s) (time) specified for PassTheTask. Check fields/fieldsets/exclude attributes of class PassTheTaskAdmin. Почему не известное поле? Уже указала, что никого я не исключаю. exclude = И вот что для меня странно:
Ругается когда я указываю это поле в филдах типа такого поля и нет вовсе для этой моделе. а list_filed показывает!
Я делаю вывод что-то я не понимаю как показывать в админке автозаполняемые поля или в чем проблема?

Офлайн

#9 Янв. 6, 2016 17:15:46

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Работа со скрытыми полями django-admin

delfenes
В админке из формы для админки PassTheTaskForm показывается данные введенные пользователем.

Покажи мне, где в втоём коде для админки ты используешь PassTheTaskForm

class PassTheTask(models.Model):
    name = models.ForeignKey(Task)
    text = models.TextField(u'Описание')
    time = models.DateTimeField(u'Дата и время сдачи задания', auto_now_add=True, null=True, blank=True)
.......
.......
class PassTheTaskAdmin(ModelAdmin):
    fields = ('name', 'text'', 'status', 'time')
    list_display = ('name', 'status',)
admin.site.register(PassTheTask, PassTheTaskAdmin)



Офлайн

#10 Янв. 6, 2016 18:20:40

delfenes
Зарегистрирован: 2012-08-23
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа со скрытыми полями django-admin

ЭЭЭЭ ты чего! в верхнем посте написано:

Админка:

class PassTheTaskForm(forms.ModelForm):
    STATUS_CHOICES = (
        ('WAIT', u'Ожидает проверки'),
        ('PASS', u'Сдано успешно'),
        ('VIEWED', u'Сдано не успешно')
    )
    status = forms.ChoiceField(choices=STATUS_CHOICES)
class PassTheTaskAdmin(ModelAdmin):
    fields = ('name', 'text'', 'status', 'time')
    list_display = ('name', 'status',)
admin.site.register(PassTheTask, PassTheTaskAdmin)

Это к файлу admins.py

А постом выше писала, позже еще дописала вот что:

class PassTheTaskAdmin(ModelAdmin):
    form = PassTheTaskForm 

Тут и использую!
Полный код файла admins.py

# -*- coding: utf-8 -*-
from django.contrib import admin
from django.contrib.admin import ModelAdmin
from .models import *
from django import forms
# Register your models here.
#class Task(ModelAdmin):
admin.site.register(Task)
class PassTheTaskForm(forms.ModelForm):
    STATUS_CHOICES = (
        ('WAIT', u'Ожидает проверки'),
        ('PASS', u'Сдано успешно'),
        ('VIEWED', u'Сдано не успешно')
    )
    status = forms.ChoiceField(choices=STATUS_CHOICES)
    class Meta:
        model = PassTheTask
	exclude = ['',]
        fileds = ['name', 'text', 'link', 'status', 'time']
class PassTheTaskAdmin(ModelAdmin):
    form = PassTheTaskForm  
    fields = ('name', 'text', 'link', 'status', 'time')
    list_display = ('name', 'status', 'time')
admin.site.register(PassTheTask, PassTheTaskAdmin)

А то, что ты привел это куски какие-то из разных файлов вообще: class PassTheTask(models.Model) - это из models.py а это действительно из админки class PassTheTaskAdmin(ModelAdmin). Но там же я писала еще.

эхэхэхэ чото я больше тебе свой код объясняю, чем какую-то посильную помощь получаю…толи у тебя особо нет времени вникать в проблему, чтобы помочь мне, то ли я не понимаю о чем ты мне пытаешься сказать… в итоге пустая какая-то трата времени… И откуда у тебя такая репутация?!

Отредактировано delfenes (Янв. 6, 2016 18:22:38)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version