mirror of
				https://github.com/django/django.git
				synced 2025-11-04 13:39:16 +00:00 
			
		
		
		
	Thanks to Ian Foote, Mariusz Felisiak, Simon Charettes, and Markus Holtermann for comments and feedback.
		
			
				
	
	
		
			60 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from django.db import connection, models
 | 
						|
 | 
						|
 | 
						|
class CurrentTranslation(models.ForeignObject):
 | 
						|
    """
 | 
						|
    Creates virtual relation to the translation with model cache enabled.
 | 
						|
    """
 | 
						|
    # Avoid validation
 | 
						|
    requires_unique_target = False
 | 
						|
 | 
						|
    def __init__(self, to, on_delete, from_fields, to_fields, **kwargs):
 | 
						|
        # Disable reverse relation
 | 
						|
        kwargs['related_name'] = '+'
 | 
						|
        # Set unique to enable model cache.
 | 
						|
        kwargs['unique'] = True
 | 
						|
        super().__init__(to, on_delete, from_fields, to_fields, **kwargs)
 | 
						|
 | 
						|
 | 
						|
class ArticleTranslation(models.Model):
 | 
						|
 | 
						|
    article = models.ForeignKey('indexes.Article', models.CASCADE)
 | 
						|
    article_no_constraint = models.ForeignKey('indexes.Article', models.CASCADE, db_constraint=False, related_name='+')
 | 
						|
    language = models.CharField(max_length=10, unique=True)
 | 
						|
    content = models.TextField()
 | 
						|
 | 
						|
 | 
						|
class Article(models.Model):
 | 
						|
    headline = models.CharField(max_length=100)
 | 
						|
    pub_date = models.DateTimeField()
 | 
						|
    published = models.BooleanField(default=False)
 | 
						|
 | 
						|
    # Add virtual relation to the ArticleTranslation model.
 | 
						|
    translation = CurrentTranslation(ArticleTranslation, models.CASCADE, ['id'], ['article'])
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        index_together = [
 | 
						|
            ["headline", "pub_date"],
 | 
						|
        ]
 | 
						|
 | 
						|
 | 
						|
# Model for index_together being used only with single list
 | 
						|
class IndexTogetherSingleList(models.Model):
 | 
						|
    headline = models.CharField(max_length=100)
 | 
						|
    pub_date = models.DateTimeField()
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        index_together = ["headline", "pub_date"]
 | 
						|
 | 
						|
 | 
						|
# Indexing a TextField on Oracle or MySQL results in index creation error.
 | 
						|
if connection.vendor == 'postgresql':
 | 
						|
    class IndexedArticle(models.Model):
 | 
						|
        headline = models.CharField(max_length=100, db_index=True)
 | 
						|
        body = models.TextField(db_index=True)
 | 
						|
        slug = models.CharField(max_length=40, unique=True)
 | 
						|
 | 
						|
 | 
						|
class IndexedArticle2(models.Model):
 | 
						|
    headline = models.CharField(max_length=100)
 | 
						|
    body = models.TextField()
 |