Привет, я работаю над проектом, в котором пользователь загружает сообщение, с другой стороны, водитель проверяет сообщение пользователя и добавляет цену на конкретное сообщение, затем пользователь видит, что водитель добавляет цену в свой пост, затем пользователь может отклонить или принять эту цену, когда он собирается принять цену, которую он выдает ошибку, теперь мой вопрос заключается в том, что я передаю первичный элемент определенного сообщения пользователя ... когда драйвер добавляет цену, он выбирает тот же первичный ключ 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
добавляя цену по pk = 1
пользователь может увидеть добавленную цену своего сообщения pk = 1
теперь пользователь добавил некоторые обязательные поля
после отправки дает ошибку