LINUX.ORG.RU

Помогите переопределить метод

 ,


0

2

Доброго времени суток, господа. Очень нужна помощь django-знатаков).

Суть проблемы: есть модель (modes.py):

class IDataTextField(models.Model):
    page = models.ForeignKey( IDataPage, verbose_name=_(u"Страница"), related_name="text_fields")
    key = models.CharField(_(u"Ключ"), max_length=250 )
    value = models.TextField( _(u"Значение"), blank=True)

    def __unicode__(self):
        return u"%s = %s" % (self.key, self.value)

    class Meta:
        verbose_name = _(u"Поле текстовых данных")
        verbose_name_plural = _(u"Поля текстовых данных")

Есть представление для этой модели (views.py):

class IPageDelete ( DetailView ):
    model = IDataTextField
    
    def delete (): # переопределяем метод delete()
        #
        self.context [ "delete_record" ] = IDataTextField ( request.POST, queryset = self.objects.get ( key, value ).delete() )
        return super ( IPageDelete, self ).delete() #

url.py (часть, разумеется):

url ( r'^delete/', IPageDelete.as_view(), name="delete_record" ),

есть шаблон:

<form method="post" name="delete_record">
                    {% csrf_token %}
                    <input type="submit" class="btn icon" value="Удалить" />
                    </form> 

Мне нужно удалить запись в таблице из полей key и value, но после нажатия на кнопку «Удалить» ничего не происходит. В чём может быть проблема?

Заранее спасибо).



Последнее исправление: cetjs2 (всего исправлений: 1)

action=«{% url „delete_record“ %}» у формы. Но там вообще везде кроме модели косяки ты не понимаешь что ты делаешь - читай документацию.

zz ★★★★
()

В чем сакральный смысл префиксировать свои классы I ?

zz ★★★★
()
Последнее исправление: zz (всего исправлений: 1)
Ответ на: комментарий от zz

Спасибо)

сейчас views.py выглядит так:

class IPageDelete ( DetailView ):
    model = IDataTextField
    
    def delete ( self ): # переопределяем метод delete()
        if request.POST [ 'action' ] == u"delete_record": # Если массиву POST передаётся name=delete_record
        # выполняется запрос на удаление полей key и value в таблице IDataTextField
            self.context [ "delete_record" ] = IDataTextField ( request.POST, queryset = self.objects.get ( key, value ).delete() )
            # хз, что делает этот цикл и нужен ли он вообще?
            for obj in objs:
                    obj.key = self.get_object()
                    obj.value = self.get_object()
                    obj.delete()
            return super ( IPageDelete, self ).delete() # хз, что есть super

Как вообще переопределяется метод delete() для удаления заданных полей таблицы?

KernelPanic
() автор топика
Ответ на: комментарий от zz

я имею ввиду, как мне удалить записи в этих полях) при нажатии на кнопку. И мне нужно именно CBV представление. Так вот, как переопределить метод delete() для такой цели?

KernelPanic
() автор топика
Ответ на: комментарий от KernelPanic

Записи в полях нельзя удалить, можно удалить запись в таблице :) Нет метода delete есть отдельный DeleteView - наследуйся от него.

zz ★★★★
()

У тебя какая-то ерунда написана. У DetailView нет метода delete, посмотри туда: https://github.com/django/django/blob/master/django/views/generic/detail.py

Уточни, что ты действительно хочешь удалить? У тебя есть таблица с данными для IDataTextField, в которой 4 колонки - id, page, key и value. Ты хочешь удалить строку в этой таблице, или значения key и value?

risenshnobel ★★★
()
Ответ на: комментарий от anonymous

Ты ведь это не серьезно?

да, я не правильно написал. В конце вызывается super.

Я к томе, что в if вызывает super и делать там return это как-то глупо.

xpahos ★★★★★
()
Ответ на: комментарий от trashymichael

так что undefined behavior, problem officer ? ну я понимаю, ладно, ладно

trashymichael ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.