Show list and dict to html

10:50 14/03/2021khienhd1 trả lời55 lượt xem

Chào bạn.

modal của mình là:

``class Campaigns(models.Model): campaign_user = models.ForeignKey(User,on_delete=models.CASCADE) campaign_code = models.CharField(max_length=10, blank=True) campaign_name = models.CharField(max_length=50, blank=True) campaign_start = models.DateField(blank=True) campaign_end = models.DateField(blank=True) campaign_product = models.CharField(max_length=500, blank=True) campaign_link = models.CharField(max_length=500, blank=True) campaign_note = models.CharField(max_length=500, blank=True) campaign_status = models.BooleanField(default=True)

Mình có 1 insert vào 1 row và get data llà

`{ 'campaign_data': [{ 'campaign_id': 1, 'campaign_code': 'CP00001', 'campaign_name': 'CP 01', 'campaign_start': datetime.date(2021, 3, 18), 'campaign_end': datetime.date(2021, 3, 31), 'campaign_product': [ { 'product_id': '1', 'campaign_price': Decimal('100000') }, { 'product_id': '2', 'campaign_price': Decimal('200000') } ], 'campaign_link': "['a', 'b', 'c']", 'campaign_note': 'a', 'campaign_status': True }] }

Ở html mình gọi ra như sau

`{% for obj in campaign_data %}

{{ obj.campaign_code }} {{ obj.campaign_name }} {{ obj.campaign_start }} {{ obj.campaign_end }} Chưa xong 30 20 10 1,200,000
                                <div class="table-responsive m-t">
                                    <table class="table invoice-table">
                                        <thead>
                                            <tr>
                                                <th>Danh sách sản phẩm</th>
                                                <th>Đơn giá</th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                            <tr>
                                                <td>{{ obj.campaign_product[0] }}</td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </div><!-- /table-responsive -->
                            </td>
                            <td><a href="/customers/customer-profile">Xem thêm</a></td>
                        </tr>
                    </tbody>
                    {% endfor %}`

Mình gọi ra được 1 số giá trị nhưng đoạn campaign_product thì mình đang không biết cách xử lý như nào.

Mình insert vào db thì nó là 1 list. Nhưng khi lấy ra nó lại là 1 string mình nghĩ đây là nguyên nhân không lấy được data trong list. Bạn có thể hướng dẫn giúp mình không

Đã chỉnh sửa lúc 03:16 17/03/2021
Gửi Trả Lời

1 phản hồi, đã có trả lời đúng

  1. Chào bạn, mình thấy field campaign_productcampaign_link của bạn trong models Campaigns hiện tại đang là CharField. Do đó dữ liệu thật sự bạn trong có vẻ là 1 list, nhưng thật ra nó là string. Vì vậy mình đề xuất một số cách sau:

    Cách 1: Sửa model, bạn sử dụng ArrayField cho 2 field campaign_productcampaign_link.

    Link docs: https://docs.djangoproject.com/en/3.1/ref/contrib/postgres/fields/#arrayfield

    Cách 2: Ép kiểu trong views trước khi xuất ra dữ liệu, bạn sẽ phải custom lại data trả về theo từng field cho phù hợp.

    Tham khảo: https://stackoverflow.com/questions/1894269/how-to-convert-string-representation-of-list-to-a-list

    Trả lời được chọn