Wie bekommt man Zugang zu verschiedenen Modellen, die in der Vorlage?

Ich habe 3 Modelle

Brauche ich zum ändern von verbindungen in den Modellen und machen Sie das key-Feld nicht eine id, aber einen Namen?

class Category(models.Model):
    name = models.CharField(max_length=150, unique=True)
    description = models.CharField(max_length=250)

class Company(models.Model):
    name = models.CharField(max_length=150, unique=True)
    country = models.CharField(max_length=50)

class Motobike(models.Model):
    name = models.CharField(max_length=150)
    company = models.ForeignKey('Company', on_delete=models.CASCADE)
    category = models.ForeignKey('Category', on_delete=models.CASCADE)

Und tests: def test_category(setup): client = Client() category_id = Category.Objekte.get(name='Мотоциклы').id response = client.get(f'/categories/{category_id}/') assert Antwort.status_code == 200 response_data = json.Lasten(in der Antwort.Inhalt.decode('utf-8')) assert len(response_data) == 2 behaupten response_data[1]['name'] == 'Ninja Turbo" behaupten response_data[1]['vendor'] == 'Kawasaki' behaupten response_data[1]['category'] == 'Мотоциклы' behaupten response_data[1]['Beschreibung'] == "

    response = client.get(f'/categories/25/')
    assert response.status_code == 404

in Anbetracht mache ich so:

 class CategoryView(DetailView):
     model = Category
     template_name = 'bikes_site/categories_detail.html'

     def get_context_data(self, id, **kwargs):
        context = get_object_or_404(self.model, id)
        context['motobikes'] =   Motobike.objects.filter(category_id=id).all()
    return context

Ich bekomme eine Fehlermeldung: get_context_data() fehlt 1 erforderliche positions-Argumente: 'id'

1 Antworten

  • HariHaraSudhan
    4. Mai 2019

    Die Funktion Unterschrift für get_context_data ist falsch, es sollte

    def get_context_data(self, **kwargs):
        //todo
    

    Ihre detail-Ansicht sollte wie dieser

     class CategoryView(DetailView):
         model = Category
         template_name = 'bikes_site/categories_detail.html'
         pk_url_kwarg = "id"
    
         def get_context_data(self, **kwargs):
           context = super().get_context_data(**kwargs) 
           category = self.get_object()
           context['motobikes'] =   Motobike.objects.filter(category_id=category.pk)
           return context