Как я могу показать обновление платежа для конкретной встречи?
Итак, я пытаюсь сделать раздел под каждой информацией о встрече, который показывает их платежные операции конкретно этой встречи. Все мои попытки до сих пор не сработали, я могу показать только все обновления платежей, что не является желаемым результатом, очевидно. вот код: views.py
def appointment_details(request, id):
search_patient_form = SearchPatient()
current_user_phone = request.session.get('user')
current_user = get_object_or_404(Doctor, phone = current_user_phone)
if current_user:
if request.method == 'POST':
searchPatient = SearchPatient(request.POST)
if searchPatient.is_valid():
patient_id_phone = searchPatient.cleaned_data['patient_id_phone']
return redirect('search_patient', id_phone=patient_id_phone)
else:
appointment = get_object_or_404(Appointment, id = id)
updates = PaymentUpDate.objects.all()
return render(request, 'about-appointment.html', {
'current_user': current_user,
'sayfa': 'appointments',
'appointment': appointment,
'updates': updates,
'search_patient_form': search_patient_form
})
else:
return redirect('login')
models.py
Это класс, который производит обновления
class PaymentUpDate(models.Model):
payment_date = models.DateTimeField(auto_now_add=True)
payment_amount = models.CharField(max_length=550)
Я попробовал сделать тот же подход, что и для показа конкретной встречи, а именно:
appointment = get_object_or_404(Appointment, id = id)
в обновления, которые выглядели примерно так:
updates = get_object_or_404(PaymentUpDate, id = id)
что привело к следующей ошибке :
TypeError at /appointment-details/3
'PaymentUpDate' object is not iterable
и я также попробовал это руководство: Как показать каждому пользователю конкретный платеж для него в django? , в результате чего мой код стал выглядеть следующим образом:
class PaymentUpDate(models.Model):
payment_date = models.DateTimeField(auto_now_add=True)
payment_amount = models.CharField(max_length=550, null=True)
appointment = models.ForeignKey(Appointment, on_delete = models.CASCADE, null=True)
views.py
updates = PaymentUpDate.objects.filter(appointment=id)
в результате чего по какой-то причине не получаю никаких обновлений. помогите пожалуйста!
Вы можете попробовать belew querysets, один из которых @raphael уже упомянул в комментарии выше.
PaymentUpDate.objects.filter(appointment=appointment)
Ор:
PaymentUpDate.objects.filter(appointment_id=id)
Но я серьезно думаю, что ...filter(appointment=id)
также должен работать, не могли бы вы проверить, есть ли в модели PaymentUpDate
экземпляры модели Appointment
или нет, поскольку у вас есть null=True
в ForeignKey (тогда я думаю, что у вас также должно быть blank=True
).
Мой первоначальный комментарий был неверным. Ответ Sunderam является правильным. Вывода нет, потому что обновление равно null. Единственное место, где я вижу, где вы действительно создаете PymentUpDate, это:
#Payment Update Section
new_update = PaymentUpDate(
payment_amount = 'Total Price : {0} - Patient Payment: {1} - Balance: {2}'.format(
total_price,upfront_payment,grand_total
)
)
new_update.save()
Здесь вы создаете новый объект PaymentUpDate, но вы не задали ему значение поля appointment
, поэтому по умолчанию оно равно null. Поэтому при поиске экземпляра PaymentUpDate, связанного с конкретной встречей, он ничего не возвращает, никакого результата.
Итак, измените его на:
#Payment Update Section
new_update = PaymentUpDate(
payment_amount = 'Total Price : {0} - Patient Payment: {1} - Balance: {2}'.format(
total_price,upfront_payment,grand_total
),
appointment=appointment
)
new_update.save()
У вас очень много if...elif...else
. Не критикую, но если мой ответ не поможет, попробуйте добавить утверждения print
в различные места вашей логики, чтобы посмотреть, действительно ли вы достигли желаемого результата, и действительно ли создаются новые объекты PaymentUpDate.