Skip to Content
Odoo मेन्यू
  • साइन इन करें
  • मुफ़्त में आज़माएं
  • ऐप्लिकेशन
    फ़ाइनेंस
    • अकाउंटिंग
    • इनवॉइसिंग
    • एक्सपेंस
    • स्प्रेडशीट (बीआई)
    • डॉक्यूमेंट्स
    • साइन
    सेल्स
    • सीआरएम
    • सेल्स
    • पीओएस शॉप
    • पीओएस रेस्टोरेंट
    • सब्सक्रिप्शन
    • रेंटल
    वेबसाइट
    • वेबसाइट बिल्डर
    • ई-कॉमर्स
    • ब्लॉग
    • फ़ोरम
    • लाइव चैट
    • ई-लर्निंग
    सप्लाई चेन
    • इन्वेंट्री
    • मैन्युफ़ैक्चरिंग
    • पीएलएम
    • परचेज़
    • मेंटेनेंस
    • क्वालिटी
    मानव संसाधन
    • कर्मचारी
    • रिक्रूटमेंट
    • टाइम ऑफ़
    • अप्रेज़ल
    • रेफ़रल
    • फ़्लीट
    मार्केटिंग
    • सोशल मार्केटिंग
    • ईमेल मार्केटिंग
    • एसएमएस मार्केटिंग
    • इवेंट
    • मार्केटिंग ऑटोमेशन
    • सर्वे
    सेवाएं
    • प्रोजेक्ट
    • टाइमशीट
    • फ़ील्ड सर्विस
    • हेल्पडेस्क
    • प्लानिंग
    • अपॉइंटमेंट
    प्रॉडक्टिविटी
    • डिस्कस
    • आर्टिफ़िशियल इंटेलिजेंस
    • आईओटी
    • वीओआईपी
    • नॉलेज
    • WhatsApp
    तीसरे पक्ष के ऐप्लिकेशन Odoo स्टूडियो Odoo क्लाउड प्लेटफ़ॉर्म
  • इंडस्ट्री
    रीटेल
    • बुक स्टोर
    • क्लोदिंग स्टोर
    • फ़र्नीचर स्टोर
    • ग्रॉसरी स्टोर
    • हार्डवेयर स्टोर
    • टॉय स्टोर
    फ़ूड & हॉस्पिटैलिटी
    • बार और पब
    • रेस्टोरेंट
    • फ़ास्ट फ़ूड
    • गेस्ट हाउस
    • बेवरिज डिस्ट्रीब्यूटर
    • होटल
    रियल एस्टेट
    • रियल एस्टेट एजेंसी
    • आर्किटेक्चर फ़र्म
    • कंसट्रक्शन
    • प्रॉपर्टी मैनेजमेंट
    • गार्ड्निंग
    • प्रॉपर्टी ओनर असोसिएशन
    कंसल्टिंग
    • अकाउंटिंग फ़र्म
    • Odoo पार्टनर
    • मार्केटिंग एजेंसी
    • लॉ फ़र्म
    • टैलेंट ऐक्विज़िशन
    • ऑडिट & सर्टिफ़िकेशन
    मैन्युफ़ैक्चरिंग
    • टेक्सटाइल
    • धातु
    • फ़र्नीचर
    • फ़ूड
    • ब्रुअरी
    • कॉर्पोरेट गिफ़्ट
    हेल्थ & फिटनेस
    • स्पोर्ट्स क्लब
    • आईवियर स्टोर
    • फिटनेस सेंटर
    • वेलनेस प्रैक्टिशनर
    • फॉर्मेसी
    • हेयर सैलून
    व्यापार
    • Handyman
    • आईटी हार्डवेयर & सपोर्ट
    • सोलर एनर्जी सिस्टम
    • शू मेकर
    • साफ-सफाई से जुड़ी सेवाएं
    • HVAC सर्विस
    अन्य
    • गैर-लाभकारी संगठन
    • एन्वायरमेंटल एजेंसी
    • बिलबोर्ड रेंटल
    • फ़ोटोग्राफी
    • बाइक लीजिंग
    • सॉफ़्टवेयर रीसेलर
    सभी इंडस्ट्री को ब्राउज़ करें
  • कम्यूनिटी
    सीखें
    • ट्यूटोरियल्स
    • दस्तावेज़
    • सर्टिफ़िकेशन
    • ट्रेनिंग
    • ब्लॉग
    • पॉडकास्ट
    शिक्षा को बढ़ावा दें
    • एजुकेशन प्रोग्राम
    • स्केल अप! बिजनेस गेम
    • Odoo के ऑफ़िस में आएं
    सॉफ़्टवेयर पाएं
    • डाउनलोड
    • वर्शन की तुलना करें
    • रिलीज़
    साथ मिलकर काम करें
    • Github
    • फ़ोरम
    • इवेंट
    • अनुवाद
    • पार्टनर बनें
    • पार्टनर के लिए सेवाएं
    • अपना अकाउंटिंग फ़र्म रजिस्टर करें
    सेवाएं पाएं
    • पार्टनर ढूंढें
    • अकाउंटेंट खोजें
    • सलाहकार की मदद लें
    • इम्प्लिमेंटेशन सेवाएं
    • कस्टमर रेफ़रेंस
    • सहायता
    • अपग्रेड
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    डेमो देखें
  • कीमत
  • सहायता
You need to be registered to interact with the community.
All Posts People Badges
टैग (View all)
odoo accounting v14 pos v15
About this forum
You need to be registered to interact with the community.
All Posts People Badges
टैग (View all)
odoo accounting v14 pos v15
About this forum
सहायता

Add required Many2one field pointing to new model defined in the same module

Subscribe

Get notified when there's activity on this post

This question has been flagged
modelsv14dependent
1 Reply
8117 डेटा देखने का तरीका
अवतार
Răzvan Anastasescu

I develop one custom module which contains:

1. one custom model (and it's data defined in XML)

2. one model which extends an existing one by adding a Many2one required field pointing to the custom model above

If I try to configure default value for the required Many2one field it raises constraints errors during installation as by that time the XML data of the dependent model wasn't yet loaded (database already contains values in the existing default model which I extend at point 2, without the new field of course)

The dependent model it's imported first in __init__.py (inside models) but I see it doesn't matter

Of course that by splitting them into two separate modules where I specify the dependency it works, but I'd like to know how can I have them in the same module.

Is there a way to load dependent model XML data before initialising the model which depends on it ?

I've extrapolated a simplified version of what I have

Module structure

my_module
├── __init__.py
├── __manifest__.py
├── data
│   └── my_model_data.xml
└── models
    ├── __init__.py
    ├── extended_model.py
    └── my_model.py

models/my_model.py

# -*- coding: utf-8 -*-
from odoo import models, fields
class MyModel(models.Model):
  _name = 'my_model.category'
  my_field = fields.Char('My Field')


data/my_model_data.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
  <data noupdate="1">
    <record id="my_external_id" model="my_model.category">
      <field name="my_field">weight</field>
    </record>
  </data>
</odoo>

models/extended_model.py

# -*- coding: utf-8 -*-
from odoo import models, fields, api
class ExtendedModel(models.Model):
  _inherit = ['extended.model']
  @api.model
  def _get_default_id(self):
    return self.env.ref('my_module.my_external_id').id
  extended_field = fields.Many2one(
    'my_model.category',
    'Extended field',
    required=True,
    default=_get_default_id
  )


 

0
अवतार
खारिज करें
अवतार
Alessandro Fiorino
Best Answer

You can define the many2one field like this

other_model_id = fields.Many2one(comodel_name = 'model.other', default = lambda self: self._default_other() )

and then add this function

@api.model

def _default_other(self):

    return self.env.ref('other.model.xml_id').id

1
अवतार
खारिज करें
Răzvan Anastasescu
लेखक

Nope, it is not working either, it's raising no record found (which I've got as well in some of my tests):

`raise ValueError('No record found for unique ID %s. It may have been deleted.' % (xmlid))`

The point is that I don't see in the log any load event of the data.xml with the records of the dependent model before the error is raised

Alessandro Fiorino

Maybe your database already has some records in the extendend.model table ?

If so, Odoo loading the module tries to add the column and set the default value to all the existing rows, before loading the xml data files, and so you get the error.

The simplest way to overcome this is to modify the default method to avoid throwing an error if the xml_id is not found, i.e.

rec=self.env.ref('other.model.xml_id', raise_if_not_found=False)

return rec.id if rec else False

and manually set the default value in the column of existing rows just after installing the module i.e.

self.env['extended.model'].search([]).write({'extendend_field': elf.env.ref('other.model.xml_id').id})

Răzvan Anastasescu
लेखक

Yes, my problems were actually 2:

- having already records in the DataBase, and I've used a validation check in the default function

- I had those fields marked as required on model, which was raising error by setting NULL as default value for existing records

So what I did:

- I've moved required form the model to the view

- I've checked in the default function if I have data or not (I was already doing so)

And for the last part, where you mentioned to manually set the default for the existing records after the module is installed:

- I guess you meant to actually run that code manually (using Odoo shell or custom script)

- but I will try to automatically call that from dependent data XML using function, so it will be done automatically after the data will be loaded (I hope it will work, I'll get there later today)

Your initial answer was inspiring in another way, meaning that you gave me the idea to use a lambda filter which actually calls a function (with parameters)

I did use lambda and separate function (without parameters) for fields default and domain, but haven't thought to combine the two in order to be able to use parameters :)

And that's nice as I have in there quite a few fields with couple of separate functions, and now I can build only one function and pass parameters through lambda

Thank you very much for your help !

Răzvan Anastasescu
लेखक

For setting default values for existing records a better approach it will be using a post_init_hook actually, instead of view function (which should work as well, but more dirty)

Enjoying the discussion? Don't just read, join in!

Create an account today to enjoy exclusive features and engage with our awesome community!

साइन अप करें
Related Posts Replies डेटा देखने का तरीका ऐक्टिविटी
How do I create an ir.config_parameter record? Solved
models v14
अवतार
अवतार
1
जुल॰ 22
13526
How can I link odoo website with backend
models website_builder v14 back-end
अवतार
अवतार
1
अग॰ 25
6220
Warning on Odoo 14 with track_visibility Solved
code models warning v14
अवतार
अवतार
1
अक्तू॰ 24
24997
[Odoo 14] - Model is not updating via Controller
widget models controllers v14
अवतार
अवतार
1
सित॰ 21
6753
In user settings access group check box changed to list view how can i change back it to checkbox
v14
अवतार
अवतार
अवतार
अवतार
3
जून 26
6774
कम्यूनिटी
  • ट्यूटोरियल्स
  • दस्तावेज़
  • फ़ोरम
ओपन सोर्स
  • डाउनलोड
  • Github
  • रनबॉट
  • अनुवाद
सेवाएं
  • Odoo.sh Hosting
  • सहायता
  • अपग्रेड
  • कस्टम डेवलपमेंट्स
  • शिक्षा
  • अकाउंटेंट खोजें
  • पार्टनर ढूंढें
  • पार्टनर बनें
हमारे बारे में
  • हमारी कंपनी
  • ब्रांड ऐसेट
  • संपर्क करें
  • नौकरियां
  • इवेंट
  • पॉडकास्ट
  • ब्लॉग
  • ग्राहक
  • लीगल • गोपनीयता
  • सुरक्षा
الْعَرَبيّة 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, बिज़नेस से जुड़े ऐप्लिकेशन का एक कलेक्शन है जो ओपन सोर्स पर आधारित है. इसमें आपकी कंपनी की हर ज़रूरत के लिए ऐप्लिकेशन हैं. जैसे, सीआरएम, ई-कॉमर्स, अकाउंटिंग, इन्वेंट्री, पॉइंट ऑफ़ सेल, प्रोजेक्ट मैनेजमेंट वगैरह.

Odoo की सबसे बड़ी खासियत है कि यह इस्तेमाल करने में बहुत आसान है और यह पूरी तरह से इंटिग्रेट किया हुआ है.

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