У меня есть модель Word, где пользователь может добавлять слова и различные поля, например, это (сокращенная версия):
class Word(models.Model):
target_word = models.CharField()
source_word = models.CharField()
add_to_review = models.BooleanField(default=True)
example_sentence = models.CharField()
image = models.ImageField(upload_to='images/',blank=True)
audio = models.FileField(upload_to='audio/',blank=True)
У меня также есть модель Flashcard, где пользователь может добавлять и изучать карточки. Здесь я показываю только соответствующий код:
class FlashcardManager(models.Manager):
def create_flashcard(self, user, question, answer, deck_name):
try:
deck = Deck.objects.get(owner=user, name=deck_name)
except ObjectDoesNotExist:
deck = Deck(owner=user, name=deck_name)
deck.save()
self.create(owner=user, question=question, answer=answer,
deck=deck)
return deck
class Flashcard(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
deck = models.ForeignKey(Deck, on_delete=models.CASCADE)
question = models.TextField()
answer = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
last_shown_at = models.DateTimeField(auto_now_add=True)
next_due_date = models.DateTimeField(default=timezone.now)
difficulty = models.FloatField(default=2.5)
consec_correct_answers = models.IntegerField(default=0)
objects = FlashcardManager()
def __str__(self):
return self.question
Когда пользователь создает новое слово, я хочу дать ему возможность автоматически создавать флэш-карту, используя предоставленную информацию. Другими словами, question = target_word, answer = source_word и имя колоды могут быть либо значением по умолчанию, либо я могу добавить поле в модель Word. Есть ли способ сделать это, используя поле add_to_review модели Word и метод create_flashcard модели FlashcardManager? Я пробовал добавить в свою модель Word функцию, которая запускается, если add_to_review истинно. Я не получаю ошибок, но ничего не происходит.
Я знаю, что одним из вариантов было бы просто объединить две модели ... но у меня есть свои причины держать их отдельно. Я все еще могу это сделать, но мне просто интересно, возможно ли то, что я пытаюсь сделать, или осуществимо? Я не совсем уверен, что именно гуглить, поэтому не смог найти никакой информации по этому поводу. Так что любой совет будет отличным, спасибо!