django admin save_model not saving model changes
Asked Answered
S

1

7

This is my admin.py:

class TransactionInfoAdmin(admin.ModelAdmin):
    search_fields=['transactionId','subscriptionInfo__customerNumber']


    save_on_top = False
    def has_add_permission(self,request):
        return False
    def has_delete_permission(self, request, obj=None):
        return False
    def get_readonly_fields(self, request, obj=None):
        if obj:
            return self.readonly_fields + ('subscriptionInfo','transactionId','authorizationId','responseCode','operation','batchNumber','merchantId')
        return self.readonly_fields

    def save_model(self, request, obj, form, change):


            #SUCCESS ACTIONS
            obj.subscriptionInfo.paid = 1
            obj.save()




        pass

When I am saving the obj.subscriptionInfo.paid = 1 its not updating the data row, any ideas why?

NOTE: subscriptionInfo is foreign key in the above model TransactionInfo.

-------------------------- UPDATE --------------------------

My model.py

class SubscriptionInfo(models.Model):
    subscriptionId = models.CharField(max_length=50)
    customerNumber = models.IntegerField()
    subscriptionType = models.CharField(max_length=50, default="basic")
    currency = models.CharField(max_length=50, default="NOK")
    paid = models.IntegerField(default=0)

    class Meta:
        verbose_name = "Subscription Information"
        verbose_name_plural = "Subscription Information"

    def __unicode__(self):
        return u'%s' % self.customerNumber


class TransactionInfo(models.Model):
    subscriptionInfo = models.ForeignKey(SubscriptionInfo, db_column='f')
    authorizationId = models.IntegerField()
    transactionId = models.TextField()
    batchNumber = models.IntegerField()
    merchantId = models.IntegerField()
    operation = models.CharField(max_length=50)
    responseCode = models.CharField(max_length=50)
    paidDate = models.DateField(_("Date"), default=datetime.date.today)

    class Meta:
        verbose_name = "Transaction Information"
        verbose_name_plural = "Transaction Information"

    def __unicode__(self):
        return u'Transaction : %s' % self.pk

Anyone?

Slugabed answered 1/8, 2013 at 12:41 Comment(3)
could you show your models code?Isabea
Edited my question with my models.Slugabed
@GlynJackson I am not sure about it, because I need to change the paid field to 1, which is default to 0 otherwise.Slugabed
O
7

you have to call:

obj.subscriptionInfo.save()

as it's on a separate model, it will look something like this:

def save_model(self, request, obj, form, change):
    #SUCCESS ACTIONS
    obj.subscriptionInfo.paid = 1
    obj.subscriptionInfo.save()
    obj.save()
Overabound answered 1/8, 2013 at 14:56 Comment(1)
awesome!! Thank you so much :)Rajput

© 2022 - 2024 — McMap. All rights reserved.