1
votes

comment puis-je ajouter des objets de mon modèle à mon CBV dans django?

J'essaie d'ajouter des objets de mon modèle dans mon CBV, j'ai un modèle créé donc j'essaie de les transmettre à mes vues, mais cela ne fonctionne pas, bien que j'ai créé 2 classes qui sont Pricing et Pricingservice, je Je veux un inline pour un champ dans Pricingservice, ce que j'ai fait, mais je ne sais pas comment ajouter les deux à ma vue dans CBV dans la vue afin d'y accéder dans mon modèle, voici mon code ci-dessous, veuillez m'aider car j'ai se bat contre cela depuis des jours, merci

model.py

    <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>

admin.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

views.py

class PricingserviceAdmin(admin.StackedInline):
    model = Pricingservice

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

    class Meta:
       model = Pricing

template.html

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

[ Je souhaite ajouter les services de tarification sous le prix ] 1


0 commentaires

3 Réponses :


1
votes

Il serait préférable d'utiliser une ListView . Vous devrez indiquer à Django quel est le modèle pertinent pour votre vue, c'est-à-dire:

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

Et puis dans votre modèle, vous pouvez utiliser:

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

Je ne sais pas exactement en quoi vos deux modèles diffèrent, mais il serait peut-être préférable de les fusionner?


3 commentaires

oh merci d'avoir répondu, je vais essayer ceci maintenant mais que signifie fusionner mes deux modèles ensemble?


@ChosenBrain Y a-t-il une bonne raison de séparer ces modèles? Il semble que ce serait mieux s'il ne s'agissait que d'un seul modèle? Quelle erreur obtenez-vous?


en fait, je veux simplement ajouter plusieurs champs de mon administrateur à la fois, c'est pourquoi je suis l'inline



0
votes

essayez ceci

views.py

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

urls.py

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

template.html h2 >
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'

Je ne suis pas sûr que cela fonctionnera mais essayez ceci si cette réponse ne fonctionne pas pour vous


0 commentaires

1
votes

Essayez cette solution:

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

Et puis essayez ce modèle:

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

Veuillez ajouter un style vous-même. :)


0 commentaires