Установка ForeignKey в Django Ошибка: соответствующий запрос не существует
Я хочу установить ForeignKeys для моих таблиц в файле views.py, но я получил эту ошибку
Слова, соответствующие запросу, не существуют.
в этой строке кода :
word_id = Words.objects.get(pk= wordID),
Я не знаю, что не так и почему я получил эту ошибку? И как я должен установить внешние ключи?
вот мой код model.py
class Words(models.Model):
word = models.CharField(max_length=50)
phonetic= models.CharField(max_length=50)
audio= models.URLField(max_length = 200)
class Meanings(models.Model):
word_id = models.ForeignKey(Words, on_delete=models.CASCADE)
partOfSpeech = models.CharField(max_length=30)
class Definitions(models.Model):
word_id = models.ForeignKey(Words, on_delete=models.CASCADE)
Meaning_id = models.OneToOneField(Meanings, on_delete=models.CASCADE, primary_key=True)
definition = models.TextField()
def __str__(self):
return self.definition
а это views.py :
def get_details(request):
words = ['hello', 'table' , windows']
wordID = 0
MeaningID = 0
for word in words:
wordID+=1
print(word)
url = 'https://api.dictionaryapi.dev/api/v2/entries/en/' + word
response = requests.get(url)
if type(response.json()) == list:
response = response.json()[0] # convert list to dictionary
word = response.get('word',{})
phonetics = response.get('phonetics',{})
phonetic = phonetics[0]
print(phonetic)
word_data = Words(
word = response.get('word',{}),
phonetic = phonetic.get('text', {}),
audio = phonetic.get('audio', {})
)
word_data.save()
meanings = response.get('meanings',{})
for i in range(len(meanings)):
MeaningID +=1
meaning_data =Meanings(
word_id = Words.objects.get(pk= wordID),
partOfSpeech = meanings[i].get('partOfSpeech',{})
)
meaning_data.save()
definitions_data = Definitions(
word_id = Words.objects.get(id= wordID),
meaning_id = Meanings.objects.get(id= MeaningID),
definition = meanings[i].get('definition',{})
)
definitions_data.save()
return HttpResponse("data added")
Первичные ключи экземпляров модели Django не сбрасываются в 1 после удаления всех экземпляров, и для сброса первичного ключа я использую этот запрос на DB
ALTER SEQUENCE al_words_id_seq RESTART WITH 1;
al_words_id_seq
можно заменить на yourapp_table_id_seq
.