محمد لارافيل نشر 3 مارس 2023 أرسل تقرير نشر 3 مارس 2023 أنا أعمل في مشروع Django للادخار اليومي حيث لدي عرض كشف الحساب وأريد عرض ودائع العميل وسحوباته في جدول HTML واحد. لا أعرف ما إذا كانت هناك طريقة أخرى لعرض السجلات في جدول من نموذج بخلاف استخدام For Loop. إذا كان هناك فيرجى افادتي النماذج class Deposit(models.Model): customer = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True) transID = models.CharField(max_length=12, null=True) acct = models.CharField(max_length=6, null=True) staff = models.ForeignKey(User, on_delete=models.CASCADE, null=True) deposit_amount = models.PositiveIntegerField(null=True) date = models.DateTimeField(auto_now_add=True) def get_absolute_url(self): return reverse('create_account', args=[self.id]) def __str__(self): return f'{self.customer} Deposited {self.deposit_amount} by {self.staff.username}' class Witdrawal(models.Model): account = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True) transID = models.CharField(max_length=12, null=True) staff = models.ForeignKey(User, on_delete=models.CASCADE, null=True) withdrawal_amount = models.PositiveIntegerField(null=True) date = models.DateTimeField(auto_now_add=True) def __str__(self): return f'{self.account}- Withdrawn - {self.withdrawal_amount}' view def account_statement(request, id): try: customer = Account.objects.get(id=id) #Get Customer ID customerID = customer.customer.id except Account.DoesNotExist: messages.error(request, 'Something Went Wrong') return redirect('create-customer') else: deposits = Deposit.objects.filter(customer__id=customerID).order_by('-date')[:5] #Get Customer Withdrawal by ID and order by Date minimum 5 records displayed withdrawals = Witdrawal.objects.filter(account__id=customerID).order_by('-date')[:5] context = { 'deposits ':deposits , 'withdrawals ':withdrawals, } return render(request, 'dashboard/statement.html', context) HTML <table class="table bg-white"> <thead class="bg-info text-white"> <tr> <th scope="col">#</th> <th scope="col">Acct. No.</th> <th scope="col">Phone</th> <th scope="col">Amount</th> <th scope="col">Date</th> <th scope="col">Action</th> </tr> </thead> {% if deposits %} <tbody> {% for deposit in deposits %} <tr> <td>{{ forloop.counter }}</td> <td>{{ deposit.acct }}</td> <td>{{ deposit.customer.phone }}</td> <td>N{{ deposit.deposit_amount | intcomma }}</td> <td>{{ deposit.date | naturaltime }}</td> <th scope="row"><a class="btn btn-success btn-sm" href="{% url 'deposit-slip' deposit.id %}">Slip</a></th> </tr> {% endfor %} </tbody> {% else %} <h3 style="text-align: center; color:red;">No Deposit Found for {{ customer.customer.profile.surname }} {{ customer.customer.profile.othernames }}</h3> {% endif %} </table> أنا قادر على عرض إيداع العميل فقط في الجدول أعلاه ولكن لا أعرف كيفية عرض كل من الإيداع والسحب للعميل في نفس الجدول, أرجو منكم المساعدة شكرا لك اقتباس
0 Muhammad Nasser2 نشر 3 مارس 2023 أرسل تقرير نشر 3 مارس 2023 يمكنك دمج نتائج استعلامات الايداع والسحب في قائمة واحدة وترتيبها حسب الوقت باستخدام ال union و order_by. ثم يمكنك استخدام القائمة الناتجة في عرض الجدول HTML. يمكنك تعديل view الخاص بك على النحو التالي: from django.db.models import F, Value, CharField from django.db.models.functions import Concat def account_statement(request, id): try: customer = Account.objects.get(id=id) # Get Customer ID customerID = customer.customer.id except Account.DoesNotExist: messages.error(request, 'Something Went Wrong') return redirect('create-customer') else: # Get Customer Deposit by ID and order by Date minimum 5 records displayed deposits = Deposit.objects.filter(customer__id=customerID).annotate( transaction_type=Value('deposit', output_field=CharField()), account=F('acct'), phone=F('customer__phone'), amount=F('deposit_amount'), date=F('date'), staff_username=F('staff__username'), ).order_by('-date')[:5] # Get Customer Withdrawal by ID and order by Date minimum 5 records displayed withdrawals = Witdrawal.objects.filter(account__id=customerID).annotate( transaction_type=Value('withdrawal', output_field=CharField()), account=F('account__acct'), phone=F('account__customer__phone'), amount=F('withdrawal_amount'), date=F('date'), staff_username=F('staff__username'), ).order_by('-date')[:5] # Merge Deposit and Withdrawal queries, and order by Date transactions = sorted( list(deposits) + list(withdrawals), key=lambda x: x.date, reverse=True ) context = { 'transactions': transactions, } return render(request, 'dashboard/statement.html', context) وتعديل القالب HTML على النحو التالي: <table class="table bg-white"> <thead class="bg-info text-white"> <tr> <th scope="col">#</th> <th scope="col">Acct. No.</th> <th scope="col">Phone</th> <th scope="col">Amount</th> <th scope="col">Date</th> <th scope="col">Transaction Type</th> <th scope="col">Staff</th> <th scope="col">Action</th> </tr> </thead> {% if transactions %} <tbody> {% for transaction in transactions %} <tr> <td>{{ forloop.counter }}</td> <td>{{ transaction.account }}</td> <td>{{ transaction.phone }}</td> <td> {% if transaction.transaction_type == 'deposit' %} N{{ transaction.amount|intcomma }} {% elif transaction.transaction_type == 'withdrawal' %} -N{{ transaction.amount|intcomma }} {% endif %} </td> <td>{{ transaction.date|naturaltime }}</td> <td>{{ transaction.transaction_type|title }}</td> <td>{{ transaction.staff_username }}</td> <td><a class="btn btn-success btn-sm اقتباس
السؤال
محمد لارافيل
أنا أعمل في مشروع Django للادخار اليومي حيث لدي عرض كشف الحساب وأريد عرض ودائع العميل وسحوباته في جدول HTML واحد. لا أعرف ما إذا كانت هناك طريقة أخرى لعرض السجلات في جدول من نموذج بخلاف استخدام For Loop. إذا كان هناك فيرجى افادتي
النماذج
class Deposit(models.Model): customer = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True) transID = models.CharField(max_length=12, null=True) acct = models.CharField(max_length=6, null=True) staff = models.ForeignKey(User, on_delete=models.CASCADE, null=True) deposit_amount = models.PositiveIntegerField(null=True) date = models.DateTimeField(auto_now_add=True) def get_absolute_url(self): return reverse('create_account', args=[self.id]) def __str__(self): return f'{self.customer} Deposited {self.deposit_amount} by {self.staff.username}' class Witdrawal(models.Model): account = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True) transID = models.CharField(max_length=12, null=True) staff = models.ForeignKey(User, on_delete=models.CASCADE, null=True) withdrawal_amount = models.PositiveIntegerField(null=True) date = models.DateTimeField(auto_now_add=True) def __str__(self): return f'{self.account}- Withdrawn - {self.withdrawal_amount}'
view
def account_statement(request, id): try: customer = Account.objects.get(id=id) #Get Customer ID customerID = customer.customer.id except Account.DoesNotExist: messages.error(request, 'Something Went Wrong') return redirect('create-customer') else: deposits = Deposit.objects.filter(customer__id=customerID).order_by('-date')[:5] #Get Customer Withdrawal by ID and order by Date minimum 5 records displayed withdrawals = Witdrawal.objects.filter(account__id=customerID).order_by('-date')[:5] context = { 'deposits ':deposits , 'withdrawals ':withdrawals, } return render(request, 'dashboard/statement.html', context)
HTML
أنا قادر على عرض إيداع العميل فقط في الجدول أعلاه ولكن لا أعرف كيفية عرض كل من الإيداع والسحب للعميل في نفس الجدول, أرجو منكم المساعدة
شكرا لك
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.