Django: невозможно назначить " ":" Booking.b_price "должен быть экземпляром" Loader_post " - PullRequest
0 голосов
/ 26 мая 2020

Привет, я работаю над проектом, в котором пользователь загружает сообщение, с другой стороны, водитель проверяет сообщение пользователя и добавляет цену на конкретное сообщение, затем пользователь видит, что водитель добавляет цену в свой пост, затем пользователь может отклонить или принять эту цену, когда он собирается принять цену, которую он выдает ошибку, теперь мой вопрос заключается в том, что я передаю первичный элемент определенного сообщения пользователя ... когда драйвер добавляет цену, он выбирает тот же первичный ключ post, но когда он собирается принять сообщение, pk изменяется

это первые модели сообщений пользователя

class Loader_post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE ,related_name="Loader")
    pick_up_station = models.CharField(max_length=150)
    destination_station = models.CharField(max_length=150)

это моя вторая модель, где pk используется во второй модели

class price(models.Model):
    my_post = models.ForeignKey(Loader_post, 
    related_name='prices',on_delete=models.CASCADE,null=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE,  null=True, default='')
    driver_price = models.CharField(max_length=150, null=True)
    driver_name = models.CharField(max_length=150, null=True)

теперь вид этой модели

@login_required
def add_price_to_post(request, pk):
    post = get_object_or_404(Loader_post, pk=pk)
    user = request.user
    if request.method == "POST":
        form = price_form(request.POST)
        if form.is_valid():
            ps = form.save(commit=False)
            ps.user = request.user
            ps.status = True
            ps.my_post = post
            ps.save()

            return redirect('Driver:Driverview')
    else:
        form = price_form()
    return render(request, 'price_form.html', {'form': form})

теперь это ключ передачи этого сообщения

<a href="{% url 'Driver:price' pk=loader.pk %}" class="btn btn-full">add price</a>

все идет нормально, но после добавления третьей модели pk где-то изменился

это третья модель

class price(models.Model):
    my_post = models.ForeignKey(Loader_post, 
    related_name='prices',on_delete=models.CASCADE,null=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE,  null=True, default='')
    driver_price = models.CharField(max_length=150, null=True)
    driver_name = models.CharField(max_length=150, null=True)

вид этой модели (я думаю, что здесь в этом виде пропущен неправильный pk)

class booking_approve(CreateView, LoginRequiredMixin):
    form_class = forms.booking_form
    model = Booking
    template_name = "confirm_booking.html"
    success_url = reverse_lazy("Loader:post")

def form_valid(self, form,*args, **kwargs):
    booking = get_object_or_404(Booking, pk=self.kwargs.get('pk'))
    print(form.cleaned_data)
    bk = form.save(commit=False)
    bk.user = self.request.user
    bk.b_price = booking
    bk.save()
    return super().form_valid(form)

это мой html страница прохождения этого pk

{% for loader_post in request.user.Loader.all %}
{% for price in loader_post.prices.all %}
<div class="container">
    <img src="{{loader_post.image_of_load.url }}" alt="Avatar" 
 style="width:100%; height: 25%; margin-bottom: 10px; ">
    <h4><b>Post id : {{loader_post.id }}</b></h4>
    <p>Driver offer : <i class="fa fa-inr" aria-hidden="true"></i> 
  {{price.driver_price }}</p>
    <p>Offer by : {{price.driver_name }}</p>
    <a style="margin-right:20px;" href="{% url 'Loader:booking_remove' 
     price.id %}"><i class="fa fa-times fa-4x" style="color: red;" aria- 
    hidden="true"></i></a>
    <a href="{% url 'Loader:booking_approve' pk=loader_post.pk %}"><i 
   class="fa fa-check-circle fa-4x" aria-hidden="true"></i></a>
   </div>
 </div>
 {% endfor %} {% endfor %}

urls.py

path('offer/', views.offer_view.as_view(), name="offer"),
path('remove/<int:pk>', views.booking_remove.as_view(), name="booking_remove"),


 path('confirm_booking/<int:pk>/booking',views.booking_approve.as_view(),
 name="booking_approve"),
path('price/<int:pk>', views.add_price_to_post, name='price'),

это сторона драйвера .. и драйвер добавляет цену для публикации с pk = 1

enter image description here

добавляя цену по pk = 1

enter image description here

пользователь может увидеть добавленную цену своего сообщения pk = 1

enter image description here

теперь пользователь добавил некоторые обязательные поля

enter image description here

после отправки дает ошибку

enter image description here

...