2017-10-18 55 views
0

我需要你的幫助,才能知道如何我可以從get_context_data實現自我Django template如何具體化Django的模板與get_context_data

我有這個類在我看來:

class IdentitySocieteResumeView(LoginRequiredMixin,TemplateView) : 

    template_name = 'Identity_Societe_Resume.html' 
    model = Societe 

    def get_context_data(self, **kwargs) : 

     context_data = super(IdentitySocieteResumeView, self).get_context_data(**kwargs) 

     id = self.kwargs['id'] 
     societe = get_object_or_404(Societe, pk=id) 

     obj = Societe.objects.filter(Nom=societe.Nom, SIRET=societe.SIRET, SIREN=societe.SIREN, Ville=societe.Ville) 

     if obj: 
      sc_obj = obj[0] 

      NIU = lib.Individu_Recherche.NIUGeneratorSociete(ModelBase=societe) 

      societe.NumeroIdentification = NIU 
      societe.save() 

      context_data['queryset'] = obj 

     return context_data 

而這個重要的功能在lib.Individu_Recherche

def NIUGeneratorSociete(ModelBase) : 

    create_year_temp = str(ModelBase.Creation.year) 
    create_year_temp2 = str(create_year_temp.split(" ")) 
    create_year = create_year_temp2[4] + create_year_temp2[5] 

    ''' A process which let to generate NumeroIdentification ''' 

    NumeroIdentification = force_text('%s-%s%s-%s-%s-%s' % ('E', create_year, create_month, create_city, key, create_country_id)) 

    return NumeroIdentification 

我的模板的一部分:

{% block content %} 

    <div class="title_subtitle_space"></div> 

    <div class="resume"> 

    {% for societe in queryset %} 

     Votre société porte le numéro : <b> {{ societe.id}} </b> <p></p> 
     N° identification attribué : <b>{{societe.NumeroIdentification}}</b> <br></br> 

    {% endfor %} 
{% endblock %} 

我敢肯定,我b。在執行此功能之前加載模板,並獲得我的模板NumeroIdentification = None b在我的數據庫中,這個字段填滿了。

我的問題是:我如何顯示我的變量NumeroIdentification在我的模板(值存儲在我的數據庫)的物有所值,而不是None

如果我按Cmd + R(MacOS Actualize),NumeroIdentification將不會是None而是一個不同的值。我想第一次在我的模板中獲得這個值。

這是一個與FBV很容易,但CBV我不克服,使其

編輯:

添加我的功能NIUGeneratorSociete

def NIUGeneratorSociete(ModelBase) : 

    create_year_temp = str(ModelBase.Creation.year) 
    create_year_temp2 = str(create_year_temp.split(" ")) 
    create_year = create_year_temp2[4] + create_year_temp2[5] 

    create_month_temp = ModelBase.Creation.month 
    if len(str(create_month_temp)) == 1 : 
     create_month = '0' + str(create_month_temp) 
    else : 
     create_month = create_month_temp 

    create_city = Villes[ModelBase.Ville] 

    key_temp = randint(0,999999) 
    if len(str(key_temp)) == 1 : 
     key = '00000' + str(key_temp) 
    elif len(str(key_temp)) == 2 : 
     key = '0000' + str(key_temp) 
    elif len(str(key_temp)) == 3 : 
     key = '000' + str(key_temp) 
    elif len(str(key_temp)) == 4 : 
     key = '00' + str(key_temp) 
    elif len(str(key_temp)) == 5 : 
     key = '0' + str(key_temp) 
    else : 
     key = key_temp 

    create_country = ModelBase.Pays 
    create_country_id = None   
    if create_country == "CG" : 
     create_country_id = 1 
    else : 
     create_country_id = 2 

    NumeroIdentification = force_text('%s-%s%s-%s-%s-%s' % ('E', create_year, create_month, create_city, key, create_country_id)) 

    return NumeroIdentification 

回答

1

不幸的是,這個代碼是各種困惑。您可以通過多種不同方式獲得同一對象,並更新一個副本,但希望其他人能夠反映更改。

你先拿到相關對象societe。然後由於某種原因,你做與該對象的所有字段模型另一個查詢,獲得由一個對象的查詢集。然後你對原始對象進行一些操作並保存,但不要將它傳遞給上下文;而是傳遞查詢集。

你的代碼可以簡化爲這樣:

def get_context_data(self, **kwargs) : 

    context_data = super(IdentitySocieteResumeView, self).get_context_data(**kwargs) 

    id = self.kwargs['id'] 
    societe = get_object_or_404(Societe, pk=id) 

    NIU = lib.Individu_Recherche.NIUGeneratorSociete(societe) 
    societe.NumeroIdentification = NIU 
    societe.save() 

    context_data['societe'] = societe 

    return context_data 

和模板:

{% block content %} 
<div class="title_subtitle_space"></div> 

    <div class="resume"> 

     Votre société porte le numéro : <b> {{ societe.id}} </b> <p></p> 
     N° identification attribué : <b>{{societe.NumeroIdentification}}</b> <br></br> 

    </div> 
</div> 
{% endblock %} 

也有一些奇怪的事情在你的庫函數回事。一個是你將對象作爲參數ModelBase傳遞;儘管不管你稱之爲什麼,ModelBase是一個類,但是你的參數是你的Societe類的一個實例。你應該把它們叫做什麼。

雖然我不能糾正這個功能,但它顯然是不完整的;全部爲create_monthcreate_city,key,create_country_id未定義。

最後,你應該考慮這是否合適。在頁面的正常GET請求中,從get_context_data調用更新函數;在GET上這樣更新對象將是非常令人驚訝的。真的這應該只在POST上完成。

+0

謝謝你的回覆。我理解我所有奇怪的事情。我必須通過'post()'更改'get_context_data()'以更新我的對象並在模板中顯示這個更新的對象? – Deadpool

1

很多奇怪的事情去這裏。

societe = get_object_or_404(Societe, pk=id)後,您將有興業實例(或404)。然後,過濾興業吃出你已經收到的情況下具有相同屬性的對象的列表,然後獲取這些的第一個。爲什麼不只是obj = get_object_or_404(Societe, pk=id)而跳過其餘的?

然後您混合obj,societesc_obj。你對其中一個人的行爲將會在別人的行爲中丟失,直到你再次獲取他們,這可能是爲什麼這種行爲在刷新。雖然可以看到你的Societe模型來確認,但可能會有所幫助。

+0

你說得對。我明白你的回覆,我不知道我爲什麼製作這些奇怪的線條。 – Deadpool