#python #web #frameworks #odoo
#питон #паутина #фреймворки #odoo
Вопрос:
Они необходимы для веб-сайта в форме регистрации (2 требования):
Я добавил поле zone_id
в модель res.users
и форму регистрации (веб-сайт), в котором будет выбрана зона. Я хочу показать другое значение поля zone_status
(поле выбора) с именем зоны, как показано ниже:
Zone1 - Active
Zone2 - Active
Zone3 - InActive
и т.д.
Как это можно сделать? А также мне нужно руководство, чтобы показать множество строк Поля2one для выбора из списка, как обычно, в собственном пользовательском интерфейсе Odoo. Он отображается автоматически, но не на странице / форме веб-сайта. В настоящее время у меня есть это как текст, как изменить его, чтобы он вел себя / отображался как поле Many2one:
<div class="form-group field-zone_id">
<label for="zone_id">Your Zone</label>
<input type="text" name="zone_id" id="zone_id" class="form-control form-control-sm"/>
</div>
Ответ №1:
Для вашего первого вопроса вы можете перезаписать метод name_get в модели, с которой у вас есть отношение m2o, и настроить строку конкатенации по своему усмотрению. Смотрите приведенный ниже пример
def name_get(self):
return [(record.id, record.name) for record in self]
@api.depends('name', 'brand_id')
def name_get(self):
res = []
for record in self:
name = record.name
if record.brand_id.name:
name = record.brand_id.name '/' name
res.append((record.id, name))
return res
или создайте новое вычисляемое поле с вашей строкой. Смотрите приведенный ниже пример из ссылки на категорию продуктов odoo
class ProductCategory(models.Model):
_name = "product.category"
#...
_rec_name = 'complete_name'
_order = 'complete_name'
name = fields.Char('Name', index=True, required=True)
complete_name = fields.Char(
'Complete Name', compute='_compute_complete_name',
store=True)
#...
@api.depends('name', 'parent_id.complete_name')
def _compute_complete_name(self):
for category in self:
if category.parent_id:
category.complete_name = '%s / %s' % (category.parent_id.complete_name, category.name)
else:
category.complete_name = category.
Для второго вопроса вы можете прочитать данные следующим образом. Смотрите приведенный ниже пример формы ссылка на модуль website_sale
<div t-attf-class="form-group #{error.get('country_id') and 'o_has_error' or ''} col-lg-6 div_country">
<label class="col-form-label" for="country_id">Country</label>
<select id="country_id" name="country_id" t-attf-class="form-control #{error.get('country_id') and 'is-invalid' or ''}">
<option value="">Country...</option>
<t t-foreach="countries" t-as="c">
<option t-att-value="c.id" t-att-selected="c.id == (country and country.id or -1)">
<t t-esc="c.name" />
</option>
</t>
</select>
</div>
Комментарии:
1. спасибо @Amr Ad-Alkrim за подробное руководство, я развернул ваш последний код здесь, чтобы заполнить поле many2one в форме веб-сайта, чтобы сделать выбор. при обновлении приложения нет ошибки, но при запуске формы регистрации отображается ошибка: Ошибка при рендеринге компиляции AST AttributeError: объект ‘NoneType’ не имеет атрибута ‘get’ Шаблон: auth_signup.fields Путь: /t/ div[6]
2. мне не удалось получить информацию (например: что использовала модель, t-foreach=countries» , что такое c.id == (страна и country.id или -1) и т. Д.) Используется здесь из-за моих очень небольших знаний, для обоих вопросов здесь мой файл model / python: класс ResUsersExt(модели. Модель): _inherit = ‘res.users’ contact_no = поля. Char(строка = ‘Номер контакта’) адрес = поля. Текст (строка=’Ваш адрес’, обязательно= True, по умолчанию=’00’) zone_id = поля. Many2one(‘tests.zones’, string=»Ваша зона», обязательно = True, по умолчанию =»1″)