Найти - Пользователи
Полная версия: ZODB Objects
Начало » Zope/Plone/Bluebream » ZODB Objects
1 2
sinitsa
Всем привет,

у меня вопрос по работе с объектами. Я пишу что то типа адресной книги на питоне. Добавление адреса отлично работает, а вот с удалением какие-то проблеммы…
При выборе объекта для удаления, в url добавляется его ключ в БД в переменную adress. Я вот так считываю: adresse=self.request.get('adress')

В чем моя ошибка? Объект не считывается.
Заранее спасибо
regall
sinitsa
В чем моя ошибка? Объект не считывается.
И что хранится в переменной adresse?
sinitsa
скорее всего эта переменная пустая, тк в if adresse: не выполняется.
Короче говоря, как мне считать URL а точнее какую-то его часть?
astoon
У объекта есть его имя в пределах контейнера. Оно же (в условиях стандартного поведения траверсера) и является последней частью его absolute_url. Оно находится в атрибуте __name__ объекта.

Вы можете взять __name__ объекта? (если нет, то это скорее недостаток дизайна. Можно, конечно взять из URL).

Тогда удалять так:
name = ob.__name__
del container[name]
sinitsa
Да, у меня имя объекта
astoon
является последней частью его absolute_url. Оно находится в атрибуте __name__ объекта.
, но я не знаю какой объект выбрал пользователь.
Т.е. при выборе пользователем адреса для удаления, его имя записывается в url и вот как это имя считать и есть мой вопрос.
astoon
sinitsa
Да, у меня имя объекта
astoon
является последней частью его absolute_url. Оно находится в атрибуте __name__ объекта.
, но я не знаю какой объект выбрал пользователь.
Т.е. при выборе пользователем адреса для удаления, его имя записывается в url и вот как это имя считать и есть мой вопрос.
Что именно в url ?

Может просто вызвать форму удаления на удаляемом объекте? Вот здесь такого пример удаления объекта в виде, вызванном на самом удаляемом объекте. Только там нужно добавить редирект (self.request.response.redirect('some_url')).

Если же вы хотите передать имя в параметре URL то сначала определитесь, как выглядит этот параметр URL. Что именно там? Откуда взято? Адрес - понятие растяжимое.
sinitsa
Что касается вашего примера, я попробывала и у меня удаляются так все объекты, а не выбранный.
Про URL: при выборе объекта (radioButton нажатый рядом с выбранным объектом) в HTML файле в обработке нажатия radioButton к строке с адресом добавляется ключ, по которому можно найти данный объект:

code:[<input type=“radio” name=“group1” tal:attributes=“value python: s.name+s.vorname”
onclick=“document.location.href='adressbuch.html?adress='+this.value”>]

теперь, когда в строке url есть ключ, я хочу с этим объектом работать: изменять или удалять.
Как мне удалить именно этот объект?

Вот так выглядит url после выбора объекта:
http://localhost:8080/adressbuch/adressbuch.html?adress=SmithJohn
astoon
sinitsa
Что касается вашего примера, я попробывала и у меня удаляются так все объекты, а не выбранный.
Про URL: при выборе объекта (radioButton нажатый рядом с выбранным объектом) в HTML файле в обработке нажатия radioButton к строке с адресом добавляется ключ, по которому можно найти данный объект:

code:[<input type=“radio” name=“group1” tal:attributes=“value python: s.name+s.vorname”
onclick=“document.location.href='adressbuch.html?adress='+this.value”>]

теперь, когда в строке url есть ключ, я хочу с этим объектом работать: изменять или удалять.
Как мне удалить именно этот объект?

Вот так выглядит url после выбора объекта:
http://localhost:8080/adressbuch/adressbuch.html?adress=SmithJohn
Не знаю что такое s.vorname. Но предположим, что параметром adress Вы передаете имя объекта (у всех объектов, хранимых в контейнере, есть свое уникальное имя в пределах контейнера, оно же одновременно хранится (должно храниться, если объект реализует интерфейс zope.location.interfaces.ILocation) в его атрибуте __name__).

И предположим, что вид adressbuch.html имеет в качестве контекста контейнер, хранящий объект для удаления (говорится что вид вызывается на этом контейнере). Тогда удаляем так (кусок из адаптера вида):

name = self.request.get('adress')
del self.context[name]
sinitsa
name = self.request.get('adress')
Этот код считывает переменную adress? она же будет типа string? именно так я и пыталась удалять объекты. После считывания я проверяла
if name:
del ...
но вот if не выполнялся, переменная name почему-то NonType
Почему такое может быть?

Имена объектов уникальныеи храняться в атрибуте __name__
astoon
sinitsa
но вот if не выполнялся, переменная name почему-то NonType
Почему такое может быть?
значит параметр запроса ‘adress’ не передан. Ищите ошибку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB