Django readonly_fields не показывает данные - PullRequest
0 голосов
/ 21 июня 2020

Моя модель Orders имеет поля rate и total_amount. Мне пришлось получить коэффициент из разных моделей, поэтому я создал unit_rate.

Точно так же я хотел, чтобы мои поля total_amount были умножением quantity и unit_rate, что я попытался сделать total_pay.

Вот мой код:

class OrderAdmin(admin.ModelAdmin):

    def unit_rate(self,obj):
        self.rate = Product.objects.get(pk=obj.order_id)
        return self.rate.price

    def total_pay(self,obj):
        self.rate = Product.objects.get(pk=obj.order_id)
        self.total_amount = self.rate.price * obj.quantity
        return self.total_amount

    list_display = ('order_id', 'order_item', 'order_status', 'delivery_address', 'customer',
        'quantity','unit_rate','total_pay')

    readonly_fields = ('total_pay','unite_rate')

admin.site.register(Orders,OrderAdmin)

Поскольку total_pay и unit_rate получены из других столбцов, администратору не нужно их вводить. Вот почему я оставил их на readonly_fields.

Проблема в том, что всякий раз, когда он создает заказ через интерфейс администратора, total_pay и unit_rate не отображаются в админке. Он просто показывает da sh вроде этого: -.

Он делает это некоторое время, так что мне действительно нужна ваша помощь. Спасибо.

1 Ответ

0 голосов
/ 22 июня 2020

На самом деле копая еще несколько часов, я нашел решение.

class OrderAdmin(admin.ModelAdmin):

    list_display = ('order_id', 'order_item', 'order_status', 'delivery_address', 'customer',
        'quantity','unit_rate','total_pay')

    def unit_rate(self,obj):
        rate = Product.objects.get(pk=obj.order_item.product_id)
        return rate.price

    def total_pay(self,obj):
        rate = Product.objects.get(pk=obj.order_item.product_id)
        total_amount = rate.price * obj.quantity
        return total_amount

admin.site.register(Orders,OrderAdmin)

На самом деле я не знал, как передать product_id вместе с order_item. и я думаю, что даже документация тоже не сильно помогает.

...