DanH
DanH

Reputation: 5818

Django related model, create if does not exist?

I have the following models:

class Merchant(BaseModel):
    user = OneToOneField(settings.AUTH_USER_MODEL, related_name='merchant', primary_key=True)

class MerchantExtended(BaseModel):
    merchant = OneToOneField(Merchant, related_name='extended', primary_key=True)
    billing_address = TextField()

And when saving a form containing Merchant and MerchantExtended data I would like to be able to do:

user = get_user_from_somewhere()
merchant = Merchant(user=user)

# Implicitly does get_or_create() and sets merchant.extended.merchant
merchant.extended.billing_address = '123 Main St'

# Implicitly does merchant.extended.save()
merchant.save()

Is the above something which already exists, or do I need to override certain model properties/methods to accomplish this?

Upvotes: 1

Views: 334

Answers (1)

Todor
Todor

Reputation: 16050

I think Django's update_or_create can be used here:

merchant = Merchant.objects.get(user=request.user)
ext_merchant, created = MerchantExtended.objects.update_or_create(
    merchant=merchant, defaults={'billing_address': '123 Main St'}
)

Upvotes: 2

Related Questions