如何在Django中获取与模板相关的单个模型对象
我在这个项目上工作,我可以在一个模板中添加两个或多个表单。我可以在模板中获取这两个表单,但在提交表单时,我获取的是rentalproperty模型的对象,而不是合同模型的对象。我已经创建了两个不同的解决方案,但这两个都不能解决问题 下面的第一个解决方案是在detailview中多次显示这两个对象,但我希望只显示一次这两个模型对象。第二种解决方案显示rentalproperty对象一次,但多次显示合同对象。有人能给我指出正确的方向吗?谢谢 第一个解决方案: views.py如何在Django中获取与模板相关的单个模型对象,django,django-models,django-forms,django-views,django-templates,Django,Django Models,Django Forms,Django Views,Django Templates,我在这个项目上工作,我可以在一个模板中添加两个或多个表单。我可以在模板中获取这两个表单,但在提交表单时,我获取的是rentalproperty模型的对象,而不是合同模型的对象。我已经创建了两个不同的解决方案,但这两个都不能解决问题 下面的第一个解决方案是在detailview中多次显示这两个对象,但我希望只显示一次这两个模型对象。第二种解决方案显示rentalproperty对象一次,但多次显示合同对象。有人能给我指出正确的方向吗?谢谢 第一个解决方案: views.py class Detai
class DetailView(generic.DetailView):
model = RentalProperty
template_name = 'rental/detail.html'
context_object_name = 'property'
def new_rental(request, pk):
if request.method == 'POST':
rental_form = NewRentalPropertyForm(request.POST, request.FILES, prefix = "rentals")
contract_form = NewContractForm(request.POST, prefix = "contracts")
if rental_form.is_valid() and contract_form.is_valid():
print ("all validation passed")
rentalproperty = rental_form.save()
contract_form.cleaned_data["rentalproperty"] = rentalproperty
print(contract_form)
contract = contract_form.save(commit=False)
contract.rentalproperty = rentalproperty
contract = contract_form.save()
return HttpResponseRedirect(reverse("home"))
else:
messages.error(request, "Error")
contract = Contract.objects.get(pk=pk)
else:
rental_form = NewRentalPropertyForm(prefix = "rentals")
contract_form = NewContractForm(prefix = "contracts")
contract = Contract.objects.get(pk=pk)
return render(request, 'rental/new_rental.html', {
#'rentalproperty': rentalproperty,
'rental_form': rental_form,
'contract_form': contract_form,
'contract': contract,
})
detail.html
<h1>This is the detail view</h1>
<h3>From landlord</h3>
<p>Landlord: {{property.created_by}}</p>
<p>address: {{property.landlord.address}}</p>
<h3>From Rental property</h3>
<ul>
{% for rental in property.landlord.rentalpropertys.all %}
<br>
<li>Title: {{property.title}}</li>
<img src="{{property.image.url}}" height="200" alt=""/>
<li>created at: {{property.created_at}}</li>
<li>Type of property: {{property.type_of_property_listing}}</li>
<li>Street: {{property.street}}</li>
<li>Borough: {{property.borough}}</li>
<ul>
{% for contract in rental.contracts.all %}
<li> Insurance required: {{contract.insurance_required}}</li>
<li> other terms: {{contract.other_terms}}</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
<h1>This is the detail view</h1>
<h3>From landlord</h3>
<p>Landlord: {{property.created_by}}</p>
<p>address: {{property.landlord.address}}</p>
<h3>From Rental property</h3>
<ul>
<li>Title: {{property.title}}</li>
<img src="{{property.image.url}}" height="200" alt=""/>
<li>created at: {{property.created_at}}</li>
<li>Type of property: {{property.type_of_property_listing}}</li>
<li>Street: {{property.street}}</li>
<li>Borough: {{property.borough}}</li>
</ul>
<ul>
{% for data in contract %}
<li> insurance : {{data.insurance_required}}</li>
<li> other terms: {{data.other_terms}}</li>
{% endfor %}
</ul>
post功能是相同的
detail.html
<h1>This is the detail view</h1>
<h3>From landlord</h3>
<p>Landlord: {{property.created_by}}</p>
<p>address: {{property.landlord.address}}</p>
<h3>From Rental property</h3>
<ul>
{% for rental in property.landlord.rentalpropertys.all %}
<br>
<li>Title: {{property.title}}</li>
<img src="{{property.image.url}}" height="200" alt=""/>
<li>created at: {{property.created_at}}</li>
<li>Type of property: {{property.type_of_property_listing}}</li>
<li>Street: {{property.street}}</li>
<li>Borough: {{property.borough}}</li>
<ul>
{% for contract in rental.contracts.all %}
<li> Insurance required: {{contract.insurance_required}}</li>
<li> other terms: {{contract.other_terms}}</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
<h1>This is the detail view</h1>
<h3>From landlord</h3>
<p>Landlord: {{property.created_by}}</p>
<p>address: {{property.landlord.address}}</p>
<h3>From Rental property</h3>
<ul>
<li>Title: {{property.title}}</li>
<img src="{{property.image.url}}" height="200" alt=""/>
<li>created at: {{property.created_at}}</li>
<li>Type of property: {{property.type_of_property_listing}}</li>
<li>Street: {{property.street}}</li>
<li>Borough: {{property.borough}}</li>
</ul>
<ul>
{% for data in contract %}
<li> insurance : {{data.insurance_required}}</li>
<li> other terms: {{data.other_terms}}</li>
{% endfor %}
</ul>
第一个解决方案输出:
地址:赫尔辛基
标题:构建应用程序
保险:是的
-这会重复多次
第二个解决方案输出:
地址:赫尔辛基
标题:构建应用程序
保险:是的
-保险会重复多次
我所期望的是:
地址:赫尔辛基
标题:构建应用程序
保险:是的
感谢您的时间:)在@Timmy O'Mahony answer的帮助下,我使用第一个解决方案在我的模板中完成了{property.contracts.all%}中的合同%。合同是租赁物业的相关名称。谢谢大家。在@Timmy O'Mahony answer的帮助下,我使用第一个解决方案在我的模板中为property.contracts.all%}中的合同做了{%for contract,效果很好。合同是租赁物业的相关名称。谢谢大家。这是家庭作业吗?如果您不想重复保险详细信息,则需要了解模板中的
合同
变量的内容以及的内容doing@TimmyO“不,这不是家庭作业。这是一个项目,我正在建设学习Django。除非我不理解你的问题,否则for就是遍历数据并返回与id相关的特定对象,至少,这是我所期望的。好的,你到底想显示什么?您想显示单个租赁物业和一份合同(与该物业相关)?@TimmyO'Mahony。这是我的意图,但从第一个解决方案中,我得到了租赁财产和合同的多个实例,第二个是租赁财产的一个实例,但得到了相关合同的多个实例。明白了。您可以发布您的RentalProperty
和Contract
模型吗。您应该能够使用模板中的循环{%for contract in property.contract\u set.all%}
来仅循环属于租赁属性的合同。这是家庭作业吗?如果您不想重复保险详细信息,则需要了解模板中的合同
变量的内容以及的内容doing@TimmyO“不,这不是家庭作业。这是一个项目,我正在建设学习Django。除非我不理解你的问题,否则for就是遍历数据并返回与id相关的特定对象,至少,这是我所期望的。好的,你到底想显示什么?您想显示单个租赁物业和一份合同(与该物业相关)?@TimmyO'Mahony。这是我的意图,但从第一个解决方案中,我得到了租赁财产和合同的多个实例,第二个是租赁财产的一个实例,但得到了相关合同的多个实例。明白了。您可以发布您的RentalProperty
和Contract
模型吗。您应该能够使用模板中的循环{%for contract in property.contract\u set.all%}
来仅循环属于租赁属性的合同。