2015-06-30 3 views
2

У меня возникли проблемы с получением поля функции для отображения строки, возвращаемой функцией в пользовательском модуле, который я использую для расширения формы stock.picking.out. В идеале я хотел бы иметь определенную строку из поля, хранящегося в отображаемой базе данных, но это проблема в другое время, потому что я даже не могу получить общую строку для отображения.Поле функции openerp не работает - OpenERP v7

Вот мое определение поля в пределах моей пользовательской класс:

_columns = { 
    'my_field_name': fields.function(_my_func, type='char', string='description', store=True, method=True, readonly=True), 
} 

Вот мое определение '_my_func':

def _my_func(self, cr, uid, ids, field_name, arg, context=None): 
    str="some string to be displayed" 
    return str 

Вот XML для поля:

<field name="my_field_name" string="Here is my string:" class="oe_inline"/> 

Я искал книгу разработчиков OpenERP, а также их форумы и эти форумы, и считаю, что я следил за всем правильным синтаксисом для этого поля, поэтому любая помощь очень ценится.

ответ

0

Просто вы должны улучшить вашу функцию Войти

вы можете сделать некоторые вещи, как это.

def _my_func(self, cr, uid, ids, field_name, arg, context=None) 
    v={} 
    if field_name: 
     v['my_field_name'] = " some string to be displayed " 
    return {'value': v} 

Тогда, наконец, ваша функциональная логика работает как шарм.

Я надеюсь, что это должно полезно для вас :)

0

Try ниже,

def _my_func(self, cr, uid, ids, field_name, arg, context=None): 
    res = {} 
    for obj in self.browse(cr, uid, ids, context=context): 
     ###Set your string here 
     str="some string to be displayed" 
     res[obj.id]['my_field_name'] = str 

    return res 
1

Вы должны улучшить свою функцию/метод, как,

def _my_func(self, cr, uid, ids, field_name, arg, context=None): 
    res = {} 
    for rec in self.browse(cr, uid, ids, context=context): 
     res[rec.id] = 'Some string' 
    return res 

при написании функционального поля (до to v7) убедитесь, что вы вернули словарь, например

{17: "some string"} 

, если у вас есть несколько поля может быть как

{17: {'field_one': 'value 1', 'field_two': 'value 1'}} 

EDIT: Также в _columns удалите readonly=True как

_columns = { 
    'my_field_name': fields.function(_my_func, type='char', string='description', store=True, method=True), 
} 

Надеется, что это помогает.

+0

Благодарим за предложение, я попробовал ответить всем (так как все они были почти идентичны друг другу), и мое поле все еще не отображает строку, верно ли мой код на Python для поля? Спасибо за помощь! – nick

+0

@nick Oh. Вы сделали поле только для чтения. проверьте мой обновленный ответ. –

+1

Readonly не должен мешать вашему ответу. Поля функций OpenERP V7 по умолчанию заданы только постольку, поскольку на нем нет обратной функции. Я думаю, что его проблема заключается в том, что многие другие имели до сих пор: stock.picking.out. Попробуйте попытку 3 найденного guewen [здесь] (https://bugs.launchpad.net/openobject-addons/+bug/1169998/comments/4). Определите поля на stock.picking и stock.picking.out (для удобства использования, определите их точно так же). Надеюсь, это поможет – CZoellner

0

Если вы немного смущены OpenERP v7, вы всегда можете попробовать с помощью Odoo (OpenERP v8). Это намного проще работать.

from openerp import models, fields,api 

класс my_class (models.Model):

_name="my.class" 
my_field_name=fields.Text(string="description", compute=_my_func, store=True, readonly=True) 

def _my_func(self): 
    self.my_field_name = "some string to be displayed" 

Я надеюсь, что это может помочь вам!

+0

Спасибо, к сожалению, я не могу использовать v8, хотя – nick

+0

, что жаль: - / – CZoellner

0

попробовать это,

def _my_func(self, cr, uid, ids, field_name, arg, context=None): 
    result = {} 
    for record in self.browse(cr, uid, ids): 
     str="some string to be displayed" 
     result[record.id] = str 
    return result 

и если вы используете магазин = True на функционально-поле, то это будет доступ в первый раз, и она будет сохранять результат в базе данных, а со следующего времени она не будет называться. Для доступа к функциональному полю каждый раз за магазин = True, см. продажа.py [количество_отчет] раздел. Мы должны написать некоторый код Addtional

0

Вы можете дать как этот также:

без использования метода просмотра ..

def _my_func(self, cr, uid, ids, field_name, arg, context=None): 
    result = {} 
    str="some string to be displayed" 
    result[ids[0]] = str 
    return result 

Убедитесь, в модели типа поля должен быть символ/текст.

Смежные вопросы