【问题标题】:Use the same object in different templates在不同的模板中使用相同的对象
【发布时间】:2015-11-08 16:49:25
【问题描述】:

我有一个显示位置列表的模板:

list_of_locations.html

{% for loc in loc_list %}
<p>
   Total desks: {{loc.total_desks}} 
</p>
<p>
   Free desks: {{loc.free_desks}}
</p>
<p>
   <a href="{% url 'cowork:offices:add' %}" class="btn btn-primary">Rent desk</a>
</p>

我还有另一个模板显示添加办公室的表格:

office_add.html:

<form class="form" method="POST" action="{% url 'cowork:offices:add' %}">{% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Add" class="btn btn-primary" />
</form>

型号:

class Location(models.Model):
    city = models.CharField(max_length=200)
    total_desks = models.IntegerField(verbose_name='Total desks')
    reserved_desks = models.IntegerField(verbose_name='Reserved desks')


class Desk(models.Model):
    location = models.OneToOneField(Location, related_name='desks')
    rent_start_date = models.DateTimeField(null=True)
    rent_end_date = models.DateTimeField(null=True)Forms:

class OfficeCreationForm(forms.ModelForm):
    class Meta:
        model = Desk
        fields = ('location', 'rent_start_date', 'rent_end_date')

观看次数:

def search(request): 
    loc_list = Location.objects.all()
    return render(request, 'list_of_locations.html', 'loc_list': loc_list)

class OfficeAddView(UserMixin, views.LoginRequiredMixin, generic.FormView): 
    form_class = forms.OfficeCreationForm
    template_name = "cowork/offices/company/office_add.html"
    success_url = reverse_lazy('cowork:offices:list')

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.company = self.user.companies.first()
        self.object.owner = self.request.user
        self.object.save()
        return HttpResponseRedirect(self.get_success_url())

现在无论用户在list_of_locations.html 中选择哪个对象,都会要求用户在office_add.html 中选择桌子。我想更改它,以便在单击list_of_locations.html 中的特定对象时,用户被重定向到office_add.html,但已经选择了desk.location,当他/她保存表单时,desk.location 将是一个用户点击了list_of_locations.html。有人可以帮忙吗?

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    只需将list_of_locations.html的最后几行改为:

    <a href="{% url 'cowork:offices:add' %}?location={{ loc.id }}" class="btn btn-primary">Rent desk</ai>
    

    另外我想如果你禁用OfficeCreationForm 中的location 字段会很好,这样用户就无法更改它。

    【讨论】:

    • 好的,我做到了,但是当我通过add_office.html 中的表单添加办公室时,location_id 没有保存 - 它是空的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多