2016-05-31 2 views
0

Как я могу присоединиться к два CharFields, ВНК и локальность с некоторой строкой между ними, чтобы создать заголовок по умолчанию поста что-то вроде этогоПо умолчанию заголовка быть комбинацией полого

title='%s house in %s'%(bhk, locality) 

и создать слизняк из него ?

class Listing(models.Model): 
    slug = models.SlugField(unique=True) 
    title = models.CharField(max_length=100) 
    post_date = models.DateField(auto_now_add=True, auto_now=False) 
    locality = models.CharField(max_length=100) 

    r='1RK' 
    one_bhk='1BHK' 
    two_bhk='2BHK' 
    three_bhk='3BHK' 
    three_plus_bhk= '3+BHK' 
    room_choices = (
     (r,'1RK'), 
     (one_bhk,'1BHK'), 
     (two_bhk,'2BHK'), 
     (three_bhk,'3BHK'), 
     (three_plus_bhk,'3+BHK')) 

    bhk = models.CharField(max_length=10, choices= room_choices, default= r) 

    def __str__(self): 
     return self.title 

    def get_absolute_url(self): 
     return reverse('list:detail', kwargs={'slug': self.slug}) 

    def create_slug (instance, new_slug=None): 
     slug= slugify(instance.title) 
     if new_slug is not None: 
      slug = new_slug 
     qs = Listing.objects.filter(slug=slug).order_by('-id') 
     exists= qs.exists() 
     if exists: 
      new_slug = '%s-%s' %(slug, qs.first().id) 
      return create_slug(instance, new_slug=new_slug) 
     return slug 
+0

Вы должны сделать это в ваш взгляд или шаблон, или создайте новый метод в вашей модели. – rnevius

ответ

1

Я бы использовать свойства

class Listing(models.Model): 
    slug = models.SlugField(unique=True) 
    title = models.CharField(max_length=100) 
    post_date = models.DateField(auto_now_add=True, auto_now=False) 
    locality = models.CharField(max_length=100) 

    @property 
    def default_title(self): 
     return '%s house in %s' % (self.title, self.locality) 

    @property 
    def default_slug(self): 
     return '%s' % slugify(self.default_title) 

один преимущество собственности является то, что вы можете использовать его в шаблоне, как если бы это был обычный атрибут класса:

{{ listing.default_title }} 
+1

Это сработало! Большое спасибо. –

+0

@AmitSingh добро пожаловать! :) – doniyor