如何在Django中获取与模板相关的单个模型对象

如何在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

我在这个项目上工作,我可以在一个模板中添加两个或多个表单。我可以在模板中获取这两个表单,但在提交表单时,我获取的是rentalproperty模型的对象,而不是合同模型的对象。我已经创建了两个不同的解决方案,但这两个都不能解决问题

下面的第一个解决方案是在detailview中多次显示这两个对象,但我希望只显示一次这两个模型对象。第二种解决方案显示rentalproperty对象一次,但多次显示合同对象。有人能给我指出正确的方向吗?谢谢

第一个解决方案: views.py

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%}
来仅循环属于租赁属性的合同。