Bỏ qua để đến Nội dung
Odoo Menu
  • Đăng nhập
  • Dùng thử miễn phí
  • Ứng dụng
    Tài chính
    • Kế toán
    • Hóa đơn
    • Chi phí
    • Bảng tính (BI)
    • Tài liệu
    • Ký tên
    Bán hàng
    • CRM
    • Bán hàng
    • POS Cửa hàng
    • POS Nhà hàng
    • Đăng ký
    • Cho thuê
    Trang web
    • Trình tạo trang web
    • Thương mại điện tử
    • Blog
    • Diễn đàn
    • Trò chuyện trực tiếp
    • Học trực tuyến
    Chuỗi cung ứng
    • Tồn kho
    • Sản xuất
    • PLM
    • Mua hàng
    • Bảo dưỡng
    • Chất lượng
    Nhân sự
    • Nhân viên
    • Tuyển dụng
    • Ngày nghỉ
    • Đánh giá
    • Giới thiệu
    • Đội xe
    Marketing
    • Marketing trên MXH
    • Marketing qua email
    • Marketing qua SMS
    • Sự kiện
    • Tự động hóa Marketing
    • Khảo sát
    Dịch vụ
    • Dự án
    • Bảng chấm công
    • Dịch vụ hiện trường
    • Hỗ trợ
    • Kế hoạch
    • Lịch hẹn
    Năng suất
    • Thảo luận
    • Trí tuệ nhân tạo (AI)
    • IoT
    • VoIP
    • Kiến thức
    • WhatsApp
    Ứng dụng của bên thứ ba Studio Odoo Nền tảng Đám mây Odoo
  • Ngành
    Bán lẻ
    • Nhà sách
    • Cửa hàng quần áo
    • Cửa hàng nội thất
    • Cửa hàng tạp hóa
    • Cửa hàng đồ kim khí
    • Cửa hàng đồ chơi
    Ẩm thực & Dịch vụ lưu trú
    • Bar và quán rượu
    • Nhà hàng
    • Đồ ăn nhanh
    • Guest house
    • Nhà phân phối đồ uống
    • Khách sạn
    Bất động sản
    • Công ty môi giới bất động sản
    • Công ty kiến trúc
    • Xây dựng
    • Quản lý bất động sản
    • Làm vườn
    • Hiệp hội chủ sở hữu bất động sản
    Tư vấn
    • Công ty kế toán
    • Đối tác Odoo
    • Công ty marketing
    • Công ty luật
    • Tuyển dụng
    • Thanh tra & chứng nhận
    Sản xuất
    • Dệt may
    • Kim loại
    • Nội thất
    • Ẩm thực
    • Nhà máy bia
    • Quà tặng doanh nghiệp
    Sức khoẻ & fitness
    • CLB thể thao
    • Cửa hàng kính mắt
    • Trung tâm fitness
    • Chuyên gia chăm sóc sức khỏe
    • Hiệu thuốc
    • Tiệm làm tóc
    Thương mại
    • Dịch vụ sửa chữa
    • Phần cứng CNTT & Hỗ trợ
    • Hệ thống năng lượng mặt trời
    • Công ty sản xuất giày
    • Dịch vụ vệ sinh
    • Dịch vụ HVAC
    Khác
    • Tổ chức phi lợi nhuận
    • Cơ quan môi trường
    • Cho thuê biển quảng cáo
    • Nhiếp ảnh
    • Cho thuê xe đạp
    • Đại lý phần mềm
    Xem tất cả ngành
  • Cộng đồng
    Học tập
    • Khóa học
    • Tài liệu
    • Chứng chỉ
    • Đào tạo
    • Blog
    • Podcast
    Thúc đẩy đào tạo
    • Chương trình đào tạo
    • Trò chơi kinh doanh Scale Up!
    • Tham quan Odoo
    Nhận phần mềm
    • Tải xuống
    • So sánh các phiên bản
    • Phiên bản
    Hợp tác
    • Github
    • Diễn đàn
    • Sự kiện
    • Dịch thuật
    • Trở thành đối tác
    • Dịch vụ dành cho Đối tác
    • Đăng ký công ty kế toán của bạn
    Nhận dịch vụ
    • Tìm đối tác
    • Tìm kế toán
    • Gặp chuyên gia hỗ trợ
    • Dịch vụ Triển khai
    • Khách hàng tham khảo
    • Hỗ trợ
    • Nâng cấp
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Nhận một buổi demo
  • Bảng giá
  • Trợ giúp
Bạn cần phải đăng ký để tương tác với cộng đồng.
Tất cả bài viết Người Huy hiệu
Thẻ (Xem tất cả)
odoo accounting v14 pos v15
Về diễn đàn này
Bạn cần phải đăng ký để tương tác với cộng đồng.
Tất cả bài viết Người Huy hiệu
Thẻ (Xem tất cả)
odoo accounting v14 pos v15
Về diễn đàn này
Hỗ trợ

[V10]Adding Customer PID to 'product.template'

Đăng ký nhận tin

Nhận thông báo khi có hoạt động trên bài viết này

Câu hỏi này đã bị gắn cờ
many2oneone2manyodoo10
3 Trả lời
6011 Lượt xem
Ảnh đại diện
Cayprol

Hi all, I just started developing Odoo.

My goals are

  1. Add multiple customer product ID to each product, because many clients of mine purchase the same item from me, but they all give it a different name.

  2. Display customer pid in table(column/row) as in each row be like, "Customer Name" | "Customer PID" | "Last update" .

From my understanding, this is done through adding a One2many field in the model 'product.template', so the form view 'product.product_template_only_form_view' can access this field.

I am able to add the desired format of view in my .xml file(mymodule_product_template.xml), and also add the One2many field named 'customer_pid' in my .py code(product.fields.py).

Image link: https://imgur.com/7ub92lb

But when I click on "Add an item", an error occurred.

Odoo Server Error
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 640, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 677, in dispatch
    result = self._call_function(**self.params)
  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 333, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/odoo/service/model.py", line 101, in wrapper
    return f(dbname, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 326, in checked_call
    result = self.endpoint(*a, **kw)
  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 935, in __call__
    return self.method(*args, **kw)
  File "/usr/lib/python2.7/dist-packages/odoo/http.py", line 506, in response_wrap
    response = f(*args, **kw)
  File "/usr/lib/python2.7/dist-packages/odoo/addons/web/controllers/main.py", line 885, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/usr/lib/python2.7/dist-packages/odoo/addons/web/controllers/main.py", line 877, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/usr/lib/python2.7/dist-packages/odoo/api.py", line 689, in call_kw
    return call_kw_multi(method, model, args, kwargs)
  File "/usr/lib/python2.7/dist-packages/odoo/api.py", line 680, in call_kw_multi
    result = method(recs, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 5456, in onchange
    record = self.new(values)
  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 5030, in new
    record._cache.update(record._convert_to_cache(values, update=True))
  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 4909, in _convert_to_cache
    for name, value in values.iteritems()
  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 4910, in <dictcomp>
    if name in fields
  File "/usr/lib/python2.7/dist-packages/odoo/fields.py", line 1949, in convert_to_cache
    return process(record.env[self.comodel_name].new(value)._ids)
  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 5030, in new
    record._cache.update(record._convert_to_cache(values, update=True))
  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 4909, in _convert_to_cache
    for name, value in values.iteritems()
  File "/usr/lib/python2.7/dist-packages/odoo/models.py", line 4910, in <dictcomp>
    if name in fields
  File "/usr/lib/python2.7/dist-packages/odoo/fields.py", line 1780, in convert_to_cache
    raise ValueError("Wrong value for %s: %r" % (self, value))
ValueError: Wrong value for res.partner.type: u'consu'

I can hit "Ok" to by-pass the error but whatever I enter, it will become public user.  Seems like the default value will replace what I fill with this record regardlessly.


Here's my xml code

<?xml version="1.0" encoding="utf-8" ?>


<odoo>
 <data>
  <record model="ir.ui.view" id="product_description">
   <field name="model">product.template</field>
   <field name="name">product.template.product.form.mymodule</field>
         <field name="inherit_id" ref="product.product_template_only_form_view"></field>
   <field name="arch" type="xml">     <!-- Hide Field: Barcode -->
    <xpath expr="//field[@name='barcode']" position="replace">
     <field name="barcode" invisible="1" modifiers="{'invisible': true}"/>
    </xpath>

    <!-- Add Feild: Last Update -->
    <group name="group_general">
     <field name="__last_update" string="Last Update" modifiers="{'readonly': true}"/>
    </group>

    <!-- Add Customer Product ID table -->
    <xpath expr="//group[@name='sale_condition']" position="after">
     <separator string="Customer Info" colspan="4"/>
     <field name="customer_pid" nolabel="1" modifiers="{}">
      <tree>
       <field name="name"/>
       <field name="pid"/>
       <field name="__last_update"/>
      </tree>
     </field>
    </xpath>

    <!-- Add Product Description(Specs) & Re-layout -->
    <xpath expr="//group[@name='description']" position="replace">
     <group name="description">
      <separator string="Description for Product" colspan="4"/>
      <field name="description" colspan="4" nolabel="1" placeholder="Description of the Prodcut Specification" modifiers="{}"/>
      <separator string="Description for Quotations" colspan="4"/>
      <field name="description_sale" colspan="4" nolabel="1" placeholder="This note will be displayed on the quotations." modifiers="{}"/>
      <separator string="Description for Vendors" colspan="4"/>
      <field name="description_purchase" nolabel="1" placeholder="This note will be displayed on requests for quotation." colspan="4" modifiers="{}"/>
      <separator string="Description for Pickings" colspan="4"/>
      <field name="description_picking" placeholder="Description for Pickings (Rack, Row and Case Information)" nolabel="1" colspan="4" modifiers="{}"/>
     </group>
    </xpath>

   </field>
  </record>

 </data>
</odoo>

Here's my py code 

from odoo import models, fields, api

class ProductTemplateInherited(models.Model):
 _inherit = 'product.template'
 customer_pid = fields.One2many('product.customerinfo', 'name', string='Customer PID')

class ProductCustomerInfo(models.Model):
 _name = 'product.customerinfo'
 _description = 'Information about a product customer'
 name = fields.Many2one('res.partner', 'Customer', index=True, domain=[('customer', '=', True)], ondelete='restrict', required=True, help='Customer relates to this product')
 pid = fields.Char(string='Product ID', required=True)
 company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.user.company_id.id, index=1)

Any help is much appreciated, thank you.

0
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
Anil Kesariya
Câu trả lời hay nhất

Hi Justin,

You need correction on your python code.

from odoo import models, fields, api

class ProductTemplateInherited(models.Model):
 _inherit = 'product.template'
 customer_pid = fields.One2many('product.customerinfo', 'product_template_id', string='Customer PID')

class ProductCustomerInfo(models.Model):
 _name = 'product.customerinfo'
 _description = 'Information about a product customer'
product_template_id = fields.Many2one("product.template", "Product")
 name = fields.Many2one('res.partner', 'Customer', index=True, domain=[('customer', '=', True)], ondelete='restrict', required=True, help='Customer relates to this product')
 pid = fields.Char(string='Product ID', required=True)
 company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.user.company_id.id, index=1)

Note. : Whenever you take One2many field you need to take self model as Many2one field inside comodel.

Hope this will clear your idea about the One2many field.


Regards,

Anil.


2
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
Hilar Andikkadavath
Câu trả lời hay nhất

problem on your customer domain, field name.

instead of customer = true try customer 'is' true or exact partner type and value

1
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
Cayprol
Tác giả Câu trả lời hay nhất

I don't have enough karma to comment,

Thank you very much Anil.  Your solution works great and solve two problems at once.

In the end, I have, 1 One2many field in 'product.template', 2 Many2one fields in 'product.customerinfo'.
One of the two links back to the One2many in  'product.template' and the other remain the same linking to 'res.partner' with domain filtering for only customer.


Also, thx to Hilar, it turned out the domain filter was not the cause of problem.

1
Ảnh đại diện
Huỷ bỏ
Anil Kesariya

If the answer was helpful than accept it. :)

Cayprol
Tác giả

done, didn't know I could click on the check circle. Thanks.

Anil Kesariya

thanks.

Anil Kesariya

Do not display this field product_template_id on view. because this field value will be auto-updated when any new line will be added using add an item.

Cayprol
Tác giả

I understand. Should I do it in the xml or the py code?

I am thinking the best practice is to use context or attr to pass condition to hide product_template_id.

For now, I made it readonly=True, so when filling the record, the product field string is visible, but it's not editable. This is just a workaround.

By any change I can hide field "product_template_id" when filling the record, after saving it, I can still see this field by clicking on in each individual record?

Cayprol
Tác giả

Forgot to mention, by adding

context="{'default_product_tmpl_id': context.get('product_tmpl_id', active_id)}"

in the xml field context, will bring up the current active product as default, making product_template_id readonly would prevent it from being editable(it will be updated to the active item upon saving anyway)

Bạn có hứng thú với cuộc thảo luận không? Đừng chỉ đọc, hãy tham gia nhé!

Tạo tài khoản ngay hôm nay để tận hưởng các tính năng độc đáo và tham gia cộng đồng tuyệt vời của chúng tôi!

Đăng ký
Bài viết liên quan Trả lời Lượt xem Hoạt động
How do I put One2many after Many2one defined? - transient module states reset
many2one one2many
Ảnh đại diện
1
thg 3 23
4787
Odoo Studio how to set a chain of multiple and related Many2one within a One2many lines
many2one one2many
Ảnh đại diện
0
thg 12 22
5440
One2many field odoo version 10
one2many odoo10
Ảnh đại diện
Ảnh đại diện
1
thg 9 22
3878
filter according to comodel's fields
many2one one2many
Ảnh đại diện
0
thg 6 21
4692
How to display other fields of a onetomany relation ?
many2one one2many
Ảnh đại diện
0
thg 6 20
8084
Cộng đồng
  • Khóa học
  • Tài liệu
  • Diễn đàn
Open source
  • Tải xuống
  • Github
  • Runbot
  • Dịch thuật
Dịch vụ
  • Lưu trữ Odoo.sh
  • Hỗ trợ
  • Nâng cấp
  • Phát triển tùy chỉnh
  • Đào tạo
  • Tìm kế toán
  • Tìm đối tác
  • Trở thành đối tác
Giới thiệu công ty
  • Công ty của chúng tôi
  • Tài sản thương hiệu
  • Liên hệ
  • Việc làm
  • Sự kiện
  • Podcast
  • Blog
  • Khách hàng
  • Pháp lý • Riêng tư
  • Bảo mật
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk Slovenščina Español (América Latina) Español Svenska ภาษาไทย Türkçe українська Tiếng Việt

Odoo là bộ ứng dụng kinh doanh có open source đáp ứng tất cả các nhu cầu của công ty bạn: CRM, thương mại điện tử, kế toán, tồn kho, POS, quản lý dự án, v.v.

Định hướng giá trị riêng biệt của Odoo là tích hợp hoàn toàn và dễ dàng sử dụng.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now