Каков наилучший способ вставить запись в таблицу журнала / истории в Django

0
I have two models:
class RateCard(models.Model):
    name = models.CharField()
    pricing_type = models.ForeignKey(PriceAttribute)

and 

class RateCardHistory(models.Model):
    name = models.CharField()
    pricing_type = models.ForeignKey(PriceAttribute)

я хочу, чтобы на каждой операции в RateCard новая запись должна была вставить RateCardHistory

Какой из них будет лучшим способом для достижения этих сигналов Django post_save или выше, используйте метод сохранения RateCard или есть какой-либо другой подход, который будет хорошим.

  • 0
    Использование метода сохранения является более явным и более простым для понимания. Если у вас нет веских причин для использования сигналов, лучше сделать это проще.
  • 0
    Спасибо @HåkenLid HåkenLid, если вы поделитесь ссылкой или ссылкой, которая будет очень полезна для меня
Показать ещё 2 комментария
Теги:
django-models
django-orm

1 ответ

0
Лучший ответ

Вы можете ovveride метод сохранения в RateCard

class RateCard(models.Model):
    name = models.CharField()
    pricing_type = models.ForeignKey(PriceAttribute)

    def save(self, *args, **kwargs):
        # the call to the super save the record as usual
        super(RateCard,self).save(*args,**kwargs)
        # do here what you want... create your new related records
        new_card_history = RateCardHistory.objects.create(name='the name', pricing_type=self)

Я предлагаю вам внести некоторые изменения в свой код. Добавьте дату создания, если вы хотите получить поля в порядке, создав и добавив также связанное имя, чтобы получить истории из RateCard

class RateCardHistory(models.Model):
    name = models.CharField()
    created = models.DateTimeField(auto_now_add=True)
    pricing_type = models.ForeignKey(PriceAttribute, related_name='histories')
  • 0
    Спасибо @karim, я сделал это, я инициировал RateCardHistory и передавал значения полей как словарь new_card_history = RateCardHistory (** data_dict), но дело в том, что он не сохраняется .. Я пытался new_card_history.save ()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню