Django история модели с отслеживанием истории внешних ключей с использованием django -simple-history - PullRequest
0 голосов
/ 20 июня 2020

У меня есть три модели с историческими записями:

class WifiUser(models.Model):
    ....
    wifiDevice = models.OneToOneField(WifiDevice, on_delete=models.CASCADE, default=None)
    wifiSim = models.OneToOneField(WifiSim, on_delete=models.CASCADE, default=None)
    history = HistoricalRecords()

class WifiDevice(models.Model):
    ....
    history = HistoricalRecords()

class WifiSim(models.Model):
    ....
    history = HistoricalRecords()

Я хочу отслеживать историю с соответствующими записями истории внешнего ключа. Но при доступе к истории Wifiuser я получаю последние значения WifiDevice и WifiSim. Я хочу, чтобы историческая запись WifiDevice и WifiSim указывала на эту запись их одного. Каков наилучший метод для этого?

Ответы [ 3 ]

0 голосов
/ 24 июня 2020
class BilingualCorpus(models.Model):
    file_url = models.FileField(upload_to='corpus_files/', validators=[FileExtensionValidator(allowed_extensions=['txt', 'csv', 'tmx', 'xlsx'])])
    file_name = models.CharField(max_length=255, default='none')
    name = models.CharField(max_length=50,default='none')
    s_lang = models.CharField(max_length=5,default='en')
    t_lang = models.CharField(max_length=5,default='th')
    note = models.TextField(blank=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True, blank=True)
    updated_at = models.DateTimeField(auto_now=True, blank=True)

class CorpusStatus(models.Model):
    status = models.CharField(max_length=50, default='Unchecked')

class  BilingualSentence(models.Model):
    corpus = models.ForeignKey(BilingualCorpus, on_delete=models.CASCADE)
    source = models.TextField(blank=True)
    target = models.TextField(blank=True)
    status = models.ForeignKey(CorpusStatus, blank=True, null=True, on_delete=models.SET_NULL)
0 голосов
/ 09 августа 2020

Я видел ваш пост в Upwork, вам нужно переопределить метод str обеих моделей WifiDevice и WifiSim следующим образом:


class WifiDevice(models.Model):
    ....
    history = HistoricalRecords()

    def __str__ (self):
    return self.history // the solution 




class WifiSim(models.Model):
    ....
    history = HistoricalRecords()
    def __str__ (self):
    return self.history // the solution 

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

Чтобы отслеживать историю, а не отображать только последний объект, я предлагаю вам добавить модель для истории, которая содержит wifiUser wifiDevice и wifiSim, и, возможно, добавить дату для даты и времени доступа для авто добавляя дату, я предлагаю вам взглянуть на этот ответ (Django автоматически сейчас и автоматически добавлять сейчас )

...