Как получить значение поля модели на основе выбранного внешнего ключа в Django? - PullRequest
0 голосов
/ 22 марта 2012

У меня есть следующая модель:

class OrderDetails(models.Model):
OrderID = models.ForeignKey(Orders)
Product = models.ForeignKey('SystemSetup.Products', unique=False)
Quantity = models.DecimalField('Quantity', max_digits=18, decimal_places=0, default=1)
Price = models.DecimalField('Price', max_digits=18, decimal_places=2)

def __unicode__(self):
 return "%s" % (self.OrderID)

Я хочу получить значение Price, но оно должно зависеть от выбранного Product:

Я также использую InLinesв админ:

class OrderInlines(admin.TabularInline):
 model = OrderDetails
 extra = 1
 readonly_fields = ['Price']

class OrdersAdmin(admin.ModelAdmin):
 fieldsets = [
 ('Order by:', {'fields': ['CustomerID']}),
 ('Detailes', {'fields': ['CashierID', 'OrderDate']}),
 ]
 list_display = ('OrderID', 'CashierID', 'CustomerID', 'OrderDate')
 list_filter = ['OrderID', 'CashierID', 'CustomerID', 'OrderDate']
 search_fields = ['OrderID', 'CashierID__EmployeeName', 'CustomerID__CustomerName',    'OrderDate']
 inlines = [OrderInlines]

Как рассчитать общую стоимость (quantity * price)?

1 Ответ

0 голосов
/ 25 марта 2012

Вы можете сделать это, переопределив метод сохранения вашей модели следующим образом:

class OrderDetails(models.Model):
    OrderID = models.ForeignKey(Orders)
    Product = models.ForeignKey('SystemSetup.Products', unique=False)
    Quantity = models.DecimalField('Quantity', max_digits=18, decimal_places=0, default=1)
    Price = models.DecimalField('Price', max_digits=18, decimal_places=2)

    def save(self, *args, **kwargs):
        self.Price = self.Product.Price * self.Quantity

        super(OrderDetails, self).save(*args, **kwargs)
...