Отношение один ко многим Django - PullRequest
1 голос
/ 11 марта 2020

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

Это фрагмент моего кода:

class Definition(models.Model):
    definition = models.CharField(max_length=64)

class Word(models.Model):
    word = models.CharField(max_length=64, unique=True)
    definitions = models.ForeignKey(Definition, on_delete=models.CASCADE, related_name="word")

Я бы нравится делать word.definitions и вернуть все определения этого слова. Кроме того, удаление слова должно удалить все определения этого слова. Наконец, a_definition.word должен дать мне слово, связанное с этим определением.

1 Ответ

5 голосов
/ 11 марта 2020

Вы должны использовать ForeignKey в классе Definition. Definition будет иметь отношение к Word:

from django.db import models

class Definition(models.Model):
    definition = models.CharField(max_length=64)
    word = models.ForeignKey(Word, on_delete=models.CASCADE)

class Word(models.Model):
    word = models.CharField(max_length=64, unique=True)

И вы можете запросить его следующим образом:

from .models import Word, Definition

word = Word.objects.get(word = 'test')   #get Word object
definitions = Definition.objects.filter(word = word)   #get all Definition objects related to word object above

for definition in definitions:   #print all definitions related to word
    print('%s -> %s' % (word.word, definition.definition))
...