2010-11-29 2 views
0

Я пытаюсь создать историю транзакций для каждой транзакции на рынке, основанной на Django.Сайт основан на Django, создав историю транзакций

Я думал, что лучший способ отслеживания этих данных - переопределить функцию save() и создать запись транзакции.

class Transaction(models.Model): 
    item = models.ManyToManyField(Item, blank=True) 
    buyer = models.ManyToManyField(User, related_name='buyer') 
    seller = models.ManyToManyField(User, related_name='seller') 
    description = models.CharField(max_length=500) 
    purchase_date = models.DateField(auto_now_add=True) 
    value = models.DecimalField(max_digits=7, decimal_places=2) 
    def save(self, *args, **kwargs): 
     self.buyer.money+=self.value 
     self.seller.money-=self.value 
     super(Transaction, self).save(*args, **kwargs) 

Я все об этом не так? Currenlty я получаю ...

'Transaction' instance needs to have a primary key value before a many-to-many relationship can be used. 

ответ

2
  1. Вы должны сохранить ваш объект перед тем вы можете пройти через многие-ко-многим.

  2. Пожалуйста, объясните, как у вас может быть несколько покупателей и продавцов по одной транзакции. (Для остальной части этого ответа я предполагаю, что нет, и вы имели в виду, что это ForeignKey.)

  3. Связанные имена для покупателя и продавца не ясны. Смотри ниже.

  4. Я не уверен, что description для. Отличается ли он от списка предметов?

  5. item следует назвать items, так как он может быть во множественном числе, и вы можете создать пользовательскую таблицу перехода (с помощью «через» параметр) с полем величины.

  6. Вы забыли сохранить связанные объекты.

Модифицированная версия:

class Transaction(models.Model): 
    items = models.ManyToManyField(Item, through='TransactionItem', blank=True) 
    buyer = models.ForeignKey(User, related_name='transactions_as_buyer') 
    seller = models.ForeignKey(User, related_name='transactions_as_seller') 
    description = models.CharField(max_length=500) 
    purchase_date = models.DateField(auto_now_add=True) 
    value = models.DecimalField(max_digits=7, decimal_places=2) 

    def save(self, *args, **kwargs): 
     super(Transaction, self).save(*args, **kwargs) 
     self.buyer.money += self.value 
     self.buyer.save() 
     self.seller.money -= self.value 
     self.seller.save() 

class TransactionItem(models.Model): 
    transaction = models.ForeignKey(Transaction) 
    item = models.ForeignKey(Item) 
    quantity = models.IntegerField() 
+0

Не только это отличный ответ .. Мы можем быть родственниками. – bdd 2010-11-29 04:16:16

1

The buyer и seller полеев много на многие поля так self.buyer никогда не будет работать, я думаю, ты смысл использовать ForeignKey вместо ManyToManyField.

Смежные вопросы