mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	Added first stab at model and DB-API unit tests
git-svn-id: http://code.djangoproject.com/svn/django/trunk@336 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		
							
								
								
									
										72
									
								
								tests/testapp/models/custom_methods.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								tests/testapp/models/custom_methods.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| """ | ||||
| 3. Giving models custom methods and custom module-level functions | ||||
|  | ||||
| Any method you add to a model will be available to instances. | ||||
|  | ||||
| Custom methods have the same namespace as if the model class were defined | ||||
| in the dynamically-generated module. That is, methods can access | ||||
| ``get_list()``, ``get_object()``, ``AddManipulator``, and all other | ||||
| module-level objects. | ||||
|  | ||||
| Also, custom methods have access to a few commonly-used objects for | ||||
| convenience: | ||||
|  | ||||
|     * The ``datetime`` module from Python's standard library. | ||||
|     * The ``db`` object from ``django.core.db``. This represents the database | ||||
|       connection, so you can do custom queries via a cursor object. | ||||
|  | ||||
| If your model method starts with "_module_", it'll be a module-level function | ||||
| instead of a method. Otherwise, custom module-level functions have the same | ||||
| namespace as custom methods. | ||||
| """ | ||||
|  | ||||
| from django.core import meta | ||||
|  | ||||
| class Article(meta.Model): | ||||
|     fields = ( | ||||
|         meta.CharField('headline', maxlength=100), | ||||
|         meta.DateField('pub_date'), | ||||
|     ) | ||||
|  | ||||
|     def __repr__(self): | ||||
|         return self.headline | ||||
|  | ||||
|     def was_published_today(self): | ||||
|         return self.pub_date == datetime.date.today() | ||||
|  | ||||
|     def get_articles_from_same_day_1(self): | ||||
|         return get_list(id__ne=self.id, pub_date__exact=self.pub_date) | ||||
|  | ||||
|     def get_articles_from_same_day_2(self): | ||||
|         """ | ||||
|         Verbose version of get_articles_from_same_day_1, which does a custom | ||||
|         database query for the sake of demonstration. | ||||
|         """ | ||||
|         cursor = db.cursor() | ||||
|         cursor.execute(""" | ||||
|             SELECT id, headline, pub_date | ||||
|             FROM custom_methods_articles | ||||
|             WHERE pub_date = %s | ||||
|                 AND id != %s""", [str(self.pub_date), self.id]) | ||||
|         return [Article(*row) for row in cursor.fetchall()] | ||||
|  | ||||
| API_TESTS = """ | ||||
| # Create a couple of Articles. | ||||
| >>> from datetime import datetime | ||||
| >>> a = articles.Article(id=None, headline='Area man programs in Python', pub_date=datetime(2005, 7, 27)) | ||||
| >>> a.save() | ||||
| >>> b = articles.Article(id=None, headline='Beatles reunite', pub_date=datetime(2005, 7, 27)) | ||||
| >>> b.save() | ||||
|  | ||||
| # Test the custom methods. | ||||
| >>> a.was_published_today() | ||||
| False | ||||
| >>> a.get_articles_from_same_day_1() | ||||
| [Beatles reunite] | ||||
| >>> a.get_articles_from_same_day_2() | ||||
| [Beatles reunite] | ||||
| >>> b.get_articles_from_same_day_1() | ||||
| [Area man programs in Python] | ||||
| >>> b.get_articles_from_same_day_2() | ||||
| [Area man programs in Python] | ||||
| """ | ||||
		Reference in New Issue
	
	Block a user