Создание нового связанного объекта из предопределенного родительского объекта в отношении один ко многим в django - PullRequest
0 голосов
/ 28 апреля 2020

Привет, я делаю проект автосалона в django, и я хотел бы иметь возможность создавать обзор автомобиля так же, как можно создать комментарий к записи в приложении блога или социальной сети. сайт. В моем случае родительский объект - это автомобиль, а связанный объект - обзор. Идеальным результатом было бы, если бы кто-то нажал на отзыв об автомобиле и веб-приложении, чтобы узнать, какой автомобиль я рассматриваю. Это то, что я пробовал до сих пор

автомобиль Models.py

from django.db import models

from django.urls import reverse

from categories.models import Category

# Create your models here.


class Car(models.Model):
    image = models.ImageField(upload_to='images/cars/')
    make = models.CharField(null=False, blank=False, max_length=30)
    model = models.CharField(null=False, blank=False, max_length=30)
    year = models.IntegerField(null=False, blank=False)
    transmission = models.CharField(null=False, blank=False, max_length=30)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

    def __str__(self):
        return self.model

    def get_absolute_url(self):
        return reverse('car_detail', args=[str(self.id)])


обзор автомобиля models.py

from django.db import models
from django.urls import reverse

from users.models import CustomUser
from cars.models import Car

# Create your models here.


class Review(models.Model):
    title = models.CharField(max_length=20)
    description = models.TextField(max_length=160)
    date_added = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    car = models.ForeignKey(Car, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('review_detail', args=[str(self.id)])

просмотров автомобилей

from django.shortcuts import render

from django.views.generic import ListView, DetailView
from .models import Car

# Create your views here.


class CarListView(ListView):
    model = Car
    template_name = 'car_list.html'


class CarDetailView(DetailView):
    model = Car
    template_name = 'car_detail.html'

просмотров обзоров автомобилей

from django.urls import reverse_lazy
from django.views.generic import (
    CreateView,
    DetailView,
    UpdateView,
    DeleteView

)

from .models import Review

# Create your views here.


class ReviewCreateView(CreateView):
    model = Review
    fields = ('title', 'description', )
    template_name = 'review_create.html'

    def form_valid(self, form):
        form.instance.user = self.request.user
        form.instance.car = self.request.car.id
        return super().form_valid(form)

urls.py

from django.urls import path

from .views import CarDetailView, CarListView
from car_reviews.views import ReviewCreateView

urlpatterns = [
    path('cars/', CarListView.as_view(), name='car_list'),
    path('cars/<int:pk>', CarDetailView.as_view(), name='car_detail'),
    path('cars/<int:pk>/review/create/',
         ReviewCreateView.as_view(), name='car_review_create')
]

шаблон сведений об автомобиле, где кнопка обзора доступна

{% extends 'base.html' %}
{% block content %}
<section style=" margin-top:100px; margin-bottom: 140px;">
    <div class="container" style="margin-left: 150px;">
        <div class="row">
            <div class="card mb-3 " style="">
                <div class="row no-gutters">
                  <div class="col-md-8">
                    <img src="{{ car.image.url  }}" class="card-img" alt="...">
                  </div>
                  <div class="col-md-4">
                    <div class="card-body">
                      <h5 class="card-title"> {{ car.make }} {{ car.model }}</h5>
                      <p class="card-text">Year: {{ car.year }}</p>
                      <p class="card-text">Transmission: {{ car.transmission }}</p>
                      <p class="card-text"><small class="text-muted">Category: {{ car.category }}</small></p>
                      <a class="btn btn-primary" href="{% url 'car_review_create'  car.id %}">Add Review</a>
                    </div>
                  </div>
                </div>
            </div>
        </div>
    </div>
</section>
{% endblock %}

на данный момент с моим текущим кодом i получить ошибку атрибута запроса wsgi, когда я попытался получить вышеуказанную желаемую функциональность, используя метод form_valid ()

...