【问题标题】:how can i add objects from my model to my CBV in django?如何将模型中的对象添加到 django 中的 CBV?
【发布时间】:2020-06-24 01:07:31
【问题描述】:

我正在尝试将我的模型中的对象添加到我的 CBV 中,我创建了一个模型,因此我试图将它们传递给我的视图,但它不起作用,尽管我创建了 2 个类,它们是 Pricing 和 Pricingservice,我想要一个内联的 Pricingservice 字段,但我不知道如何将两者都添加到视图中的 CBV 视图中,以便在我的模板中访问它们,下面是我的代码,请帮助我,因为我有这几天一直在努力,谢谢

model.py

​​>
class Pricing(models.Model):
    plans = models.CharField(max_length=250)
    amount = models.CharField(max_length=250)
    services = models.CharField(max_length=250)

  
    def __str__(self):
        return self.plans

class Pricingservice(models.Model):
    pricing = models.ForeignKey(Pricing, default=None, on_delete=models.CASCADE)
    services = models.CharField(max_length=250)

    

    def __str__(self):
        return self.pricing.plans

admin.py

​​>
class PricingserviceAdmin(admin.StackedInline):
    model = Pricingservice

@admin.register(Pricing)
class PricingAdmin(admin.ModelAdmin):
    inlines = [PricingserviceAdmin]

    class Meta:
       model = Pricing

views.py

​​>
class HomePageView(TemplateView):
    template_name = 'pages/home.html'
    
    def get_context_data(self, **kwargs):
        context = super(HomePageView, self).get_context_data(**kwargs)
        context['Pricing'] = Pricing.objects.all()
        return context

模板.html

    <div class="row">
     {% for p in Pricing %}
    <div class="col-md-3 ftco-animate">
    
        <div class="pricing-entry pb-5 text-center">
            <div>
                <h3 class="mb-4">{{ p.plans }}</h3>
                <p><span class="price">#{{ p.amount }}</span> <span class="per">/ Month</span></p>
            </div>

            <ul>
                <li>{{ p.services }}</li>
        
            </ul>
    
            <p class="button text-center"><a href="#" class="btn btn-primary px-4 py-3">Get Offer</a></p>
    
        </div>

    
    </div>
    {% endfor %}
</div>

[]1

【问题讨论】:

    标签: django django-models django-views django-templates


    【解决方案1】:

    试试这个解决方案:

    class HomePageView(ListView):
        model = Pricing
        template_name = 'pages/home.html'
    

    然后试试这个模板:

    {% for pricing in object_list %}
        {{pricing.plans}}<br>
        {% for service in pricing.pricingservice_set.all %}
            {{ service.services }}<br>
        {% endfor %}
    {% endfor %}
    

    请自己添加一些样式。 :)

    【讨论】:

      【解决方案2】:

      最好使用ListView。您需要告诉 Django 您的视图的相关模型是什么,即:

      class HomePageView(ListView):
          model = Pricingservice
          template_name = 'pages/home.html'
      

      然后在你的模板中,你可以使用:

      {% for pricingservice in pricingservice_list %}
      {{ pricingservice.pricing }}
      {% endfor %}
      

      我不确定你的两个模型到底有什么不同,但也许合并它们会更好?

      【讨论】:

      • 哦,谢谢您的回复,我现在就试试这个,但是将我的两个模型合并在一起是什么意思?
      • @ChosenBrain 是否有充分的理由将这些模型分开?看起来如果它只是一个模型会更好?你得到什么错误?
      • 其实我只是想一次从我的管理员添加多个字段,这就是为什么我遵循内联
      【解决方案3】:

      试试这个

      views.py

      class HomePageView(TemplateView):
          template_name = 'pages/home.html'
          
          def get_context_data(self, **kwargs):
              context = super(HomePageView, self).get_context_data(**kwargs)
              context['Pricing'] = Pricing.objects.all()
              return context
      
      class PricePageView(ListView):
          model = Pricingservice
          template_name = 'pages/home.html'
      

      urls.py

      ​​>
      path('', HomePageView.as_view(), name='home'),
      path('price/', PricePageView.as_view(), name='price'),
      

      模板.html

      {% for pricingservice in Pricingservice_list %}
                          <ul>
                              <li>{{ pricingservice }}</li>
                      
                          </ul>
                          {% endfor %}
      

      不确定这是否可行,但如果该答案不适合您,请尝试此方法

      【讨论】:

        猜你喜欢
        • 2014-09-24
        • 2018-09-13
        • 2020-07-31
        • 2021-11-01
        • 2020-06-09
        • 2017-09-01
        • 1970-01-01
        • 2022-11-28
        • 2018-10-05
        相关资源
        最近更新 更多