2016-02-17 105 views
0

我面臨一個小問題,我看不透。Django從命令行prepopulated_fields

我有一個解析csv文件的命令行:

class Command(BaseCommand): 
help = 'Import list of press article from .csv' 

def handle(self, *args, **options): 
    activate('en') #without it the language will be wrong 

    ArticleFile = csv.reader(open(args[0]), delimiter=',') 
    global_article = "" 
    current_site = Site.objects.get_current() 
    is_new_source = [] 

    for row in ArticleFile: 
     isIn = False 
     _country = "" 

     if row[0] != "Order": 
      if row[7] == "TRUE": 
       global_article = True 
      elif row[7] == "FALSE": 
       _country = Country.objects.get(name_ascii=row[6]) 
       global_article = False 


      if row[5].endswith(' '): 
       row[5] = row[5][:-1] 

      for is_exist in is_new_source: 
       if is_exist.split(' ') == row[5].split(' '): 
        isIn = True 

      new_article = Article(
       article_url=row[9], 
       global_regions=global_article, 
       title = row[8], 
       date_realization=datetime.strptime(row[4] + '-' + row[3] + '-' + row[2], '%Y-%m-%d').date(), 
      ) 

      new_article.save() 

      if isIn == False: 
       is_new_source.append(row[5]) 
       _source = ArticleSource.objects.create(name=row[5]) 
      else: 
       _source = ArticleSource.objects.get(name=row[5]) 
      new_article.sources.add(_source) 
      new_article.sites.add(current_site) 
      if _country != "": 
       new_article.article_country.add(_country) 

,我有我的管理這種神奇的線(對源爲例):

class ArticleSourceAdmin(VersionedPlaceholderAdminMixin, 
         FrontendEditableAdminMixin, 
         SortableAdminMixin): 
    list_display = ['__str__'] 
    prepopulated_fields = {'slug': ('name',), } 

admin.site.register(ArticleSource, ArticleSourceAdmin) 

如果我有一個文章,我可以看到,slu is在輸入時自動填充。 但用命令行來解析csv文件,slug將保持爲空。

有什麼想法?

非常感謝

+1

'prepopulated_fields'使用JavaScript來自動填充輸入。在命令行上不起作用。爲了在使用命令行時設置'slug',你需要重寫模型的'save'方法。 – xyres

+0

哦,好的,謝謝xyres! –

+0

我已經發布了一個例子的答案。看看它是否有幫助。 – xyres

回答

4

爲了自動設置slug你需要重寫你的模型的save方法。

因爲我們還沒有發佈你的模型,我會嘗試用一個例子來回答你的問題:

from django.utils.text import slugify 

class MyModel(models.Model): 
    name = models.CharField(max_length=100) 
    slug = models.SlugField(max_length=100) 

    def save(self, *args, **kwargs): 
     if not self.slug: 
      self.slug = slugify(self.name) 
     super(MyModel, self).save(*args, **kwargs) 
+0

感謝您的支持或節省時間xyres;) –