我需要您的帮助,以便了解如何从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 %}
我的模板的一部分:
NumeroIdentification = None
我确定我的模板在执行此功能之前已加载,我进入模板NumeroIdentification
,但在我的数据库中,此字段已填满。
我的问题是:如何在我的模板中显示具有良好价值的变量None
(我的数据库中存储的值)而不是Cmd + R
?
如果我按NumeroIdentification
(MacOS Actualize),None
将不是NIUGeneratorSociete
,而是另一个值。我想第一次在我的模板中获得这个值。
使用FBV非常容易,但是对于CBV,我没有克服这个问题
编辑:
我添加了我的函数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}}
答案 0 :(得分:1)
这里发生了很多奇怪的事情。
在societe = get_object_or_404(Societe, pk=id)
之后,您将拥有一个Societe实例(或404)。然后,您过滤Societe以获取在您已收到的实例上具有相同属性的对象列表,然后获取其中的第一个。为什么不只是obj = get_object_or_404(Societe, pk=id)
并跳过其余的?
然后,您混合obj
,societe
和sc_obj
。您对其中一个的操作将丢失在其他人身上,直到您再次获取它们为止,这可能是为什么这可以用于刷新。可能有助于看到您的Societe
模型进行确认。
答案 1 :(得分: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_month
,create_city
,key
,create_country_id
都未定义。
最后,您应该考虑是否合适。在页面的正常GET请求中从get_context_data
调用更新函数;如果在GET上像这样更新对象,那将是非常令人惊讶的。真的,这应该只在POST上完成。