Как я могу показать обновление платежа для конкретной встречи?

Итак, я пытаюсь сделать раздел под каждой информацией о встрече, который показывает их платежные операции конкретно этой встречи. Все мои попытки до сих пор не сработали, я могу показать только все обновления платежей, что не является желаемым результатом, очевидно. вот код: 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.

Вернуться на верх