from django.db import models

class ModelManagerReadOnly(model.Manager):
    def update(self, *args, **kwargs):
        pass
          

class ModelReadOnly(models.Model):
     objects = ModelManagerReadOnly() # The ReadOnly manager.
    
    def save(self, *args, **kwargs):
        pass
        #raise NotImplemented
    
    def delete(self, *args, **kwargs):
        pass
    
    class Meta:
        managed = False
        abstract = True



class AppLog(ModelReadOnly):
    log_no = models.AutoField(db_column=u'LOG_NO') # Field name made 
lowercase.
    module_id = models.CharField(max_length=25, db_column=u'MODULE_ID') # 
Field name made lowercase.
    user_name = models.CharField(max_length=25, db_column=u'USER_NAME') # 
Field name made lowercase.
    full_name = models.CharField(max_length=80, db_column=u'FULL_NAME') # 
Field name made lowercase.
    description = models.CharField(max_length=3500, 
db_column=u'DESCRIPTION', blank=True) # Field name made lowercase.
    date_time_stamp = models.DateTimeField(db_column=u'DATE_TIME_STAMP') # 
Field name made lowercase.
    class Meta:
        db_table = u'APP_LOG'

updated code


On Monday, 29 October 2012 09:58:52 UTC+2, Gregg Branquinho wrote:
>
> Hi guys thanks for the help so Far, from what I understand this is what I 
> have to do for models.. 
>
> <code>
> from django.db import models
>
> class ModelReadOnly(models.Model):
>     
>     def save(self, *args, **kwargs):
>         pass
>         #raise NotImplemented
>     
>     class Meta:
>         managed = False
>
> class AppLog(ModelReadOnly):
>     log_no = models.AutoField(db_column=u'LOG_NO') # Field name made 
> lowercase.
>     module_id = models.CharField(max_length=25, db_column=u'MODULE_ID') # 
> Field name made lowercase.
>     user_name = models.CharField(max_length=25, db_column=u'USER_NAME') # 
> Field name made lowercase.
>     full_name = models.CharField(max_length=80, db_column=u'FULL_NAME') # 
> Field name made lowercase.
>     description = models.CharField(max_length=3500, 
> db_column=u'DESCRIPTION', blank=True) # Field name made lowercase.
>     date_time_stamp = models.DateTimeField(db_column=u'DATE_TIME_STAMP') # 
> Field name made lowercase.
>     class Meta:
>         db_table = u'APP_LOG'
>
> </code>
>
> Thanks should take car of the db structure and the save, now I need to 
> look at the model manager to circumvent the update.. ?
>
>  
>
>
>
>
>
>
>
>
> On Thursday, 25 October 2012 08:59:53 UTC+2, Russell Keith-Magee wrote:
>>
>>
>> On Thu, Oct 25, 2012 at 12:43 PM, Gregg Branquinho 
>> <gr...@freightman.com>wrote:
>>
>>> Hi Russel,
>>>
>>> First off thank you for the suggestion, I am going to give it a whirl 
>>> and see how it works out.. I have a couple of concerns about the pricing 
>>> database it the
>>> * it is on  mssql and the data is spread accross 3 database on the same 
>>> server so the query would have to be cross database.. which also pose's a 
>>> problem.
>>>
>>
>> Genuine cross-database queries are going to be a problem regardless -- 
>> Django doesn't handle foreign keys that cross database boundaries. However, 
>> if it's just a matter of having three different data stores, that's not a 
>> problem at all -- it just means you'll have multiple entries in your 
>> database configuration.
>>
>> * the db's have like 300 table each..
>>>
>>
>> There's a "yikes" factor here in terms of the number of tables you'll 
>> need to configure, but inspected will help you out here, and once that's 
>> done, you shouldn't have any problems in practice.  
>>  
>>
>>> Before you answer I wat thinking of accessing the database on the view 
>>> *yuck* via pyodbc.
>>>
>>> after your answer I have a couple more questions ?
>>>
>>> Is is possible to override how a model is loaded from the database with 
>>> raw sql and then overide the save and update methods to do nothing ? I have 
>>> look at ovveriding __init__ but all recommendation are against it, but 
>>> since I am not saving would it make any difference ?
>>>
>>
>> You can certainly override the save() method and make it a no-op; you 
>> don't need to touch __init__ at all to do this. Just make a subclass of 
>> django.db.models.Model that defines a no-op save() method, and make sure 
>> all your "views" extend this base class. Simliarly, you can override the 
>> model manager to provide a default query set that makes the update a no-op. 
>> As a third line of defence, you can write a database router that directs 
>> write queries to a no-op database, so if something does accidentally 
>> trigger a database write, it won't allow the update to occur.
>>
>> Yours,
>> Russ Magee %-)
>>
>
> Email Disclaimer <http://www.freightman.com/Legal/EmailDisclaimer> | Quote 
> Disclaimer <http://www.freightman.com//Legal/QuoteDisclaimer> | All 
> business is undertaken subject to our General Trading Conditions, a copy of 
> which is available on request and on our website 
> www.freightman.com<http://www.freightman.com/Legal/TradingTerms>


-- 
Email Disclaimer <http://www.freightman.com/Legal/EmailDisclaimer> | Quote 
Disclaimer <http://www.freightman.com//Legal/QuoteDisclaimer> | All 
business is undertaken subject to our General Trading Conditions, a copy of 
which is available on request and on our website 
www.freightman.com<http://www.freightman.com/Legal/TradingTerms>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/mh0ntSK1xF8J.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to