Python Forum
magic related field in Django model
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
magic related field in Django model
#1
Hello

I have a Django model class as:

from django.db import models

class DeliveryUpdate(models.Model):
    delivery_id = models.CharField(max_length=32, blank=False, unique=True)
    field_updates = JSONField()
    
    @property
    def delivery_address(self):
        return self.delivery_address_ref
        
    @delivery_address.setter
    def delivery_address(self, value):  # Line 15
        print ("At the setter for delivery_address") #To check if this function is called
        self.delivery_address_ref = value

The app runs under docker. After data was populated by some csv files, the table deliveryupdate is created with fields delivery_id and field_updates (there is no delivery_address field in this table)

In a utils.py code, I saw there is the codes to return a delivery_address as:

delivery_id = "xzy"
delivery_update = DeliveryUpdate.objects.get(delivery_id=delivery_id)
delivery_address = delivery_update.delivery_address  #line 27
print (str(delivery_address)) # I could see a valid delivery_address here
I do not understand here is how the value for delivery_update.delivery_address is returned (line 27) when the setter function is NOT called (eg: line #15 delivery_address(self, value)). In another word, I could not find the printout string "At the setter for delivery_address".

Look around, I could see a related class as:

class DeliveryAddress(models.Model):
    ...
    delivery_update = models.OneToOneField(
        'DeliveryUpdate',
        db_column='delivery_update',
        to_field='delivery_id',
        related_name='delivery_address_ref',
        on_delete=models.CASCADE,
        max_length=32
    ) 
    ...
 
I also saw the table deliveryaddress is created.

I am new to Python and Django, could you please explain why delivery_address is returned when setter function is not called. Some magic things happen here ???

Many thanks
Reply
#2
I think I found it. DeliveryUpdate object can have a ref of DeliveryAddress
Thanks
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  model.fit and model.predict errors hatflyer 6 1,188 Nov-10-2023, 01:39 AM
Last Post: hatflyer
  Django: Adding Row Data To Existing Model Instance Question/Problem. Steven_Pinkerton 1 1,214 Aug-09-2022, 10:46 AM
Last Post: Addweb
  What happens line by line after I register a model in django Novichok 1 1,199 Apr-03-2022, 03:05 PM
Last Post: sastonrobert
  Need a little help with numpy array magic. pmf71 0 1,126 Dec-01-2021, 02:51 AM
Last Post: pmf71
  FileNotFoundError: [Errno 2] No such file or directory: 'model/doc2vec.model/Articles Anldra12 10 5,676 Jun-11-2021, 04:48 PM
Last Post: snippsat
  Although this is a talib related Q it's mostly related to python module installing.. Evalias123 4 5,584 Jan-10-2021, 11:39 PM
Last Post: Evalias123
  Magic Method Arithmetic Operators ClownPrinceOfCrime 3 2,280 Jan-10-2021, 03:24 PM
Last Post: ndc85430
  Bug ? when dataclass field name == field type Cyril 0 1,525 Oct-22-2020, 03:26 AM
Last Post: Cyril
  How to eliminate magic squares formed by the same numbers, but permuted frame 7 3,554 May-09-2019, 11:28 AM
Last Post: frame
  Magic method __str__ dan789 16 7,071 Dec-23-2018, 03:59 PM
Last Post: ichabod801

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020