【问题标题】:Set ForeignKey in Django Error : matching query does not exist在 Django 错误中设置 ForeignKey:匹配的查询不存在
【发布时间】:2022-01-19 19:28:18
【问题描述】:

我想在views.py 中为我的表设置ForeignKeys,但我得到了这个错误

词匹配查询不存在。

在这行代码:

  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")

【问题讨论】:

  • 对于给定的wordID,数据库中没有Word 记录。
  • 您是否在管理面板中检查了您正在寻找的 id 存在?
  • 您可以使用 try/except 来避免 get() 方法引发的 DoesNotExists 异常
  • @WillemVanOnsem 所以我不能用一种方法设置所有数据?我的意思是我应该先设置单词表数据,然后是含义,然后是定义吗?
  • 或者你可以使用get_object_or_404:docs.djangoproject.com/en/4.0/topics/http/shortcuts/…

标签: python django django-models django-views foreign-keys


【解决方案1】:

删除所有实例后,Django 模型实例主键不会重置为 1,并且要重置主键,我在 DB 上使用此查询

ALTER SEQUENCE al_words_id_seq RESTART WITH 1;

al_words_id_seq 可以替换为yourapp_table_id_seq。

【讨论】:

    猜你喜欢
    • 2013-07-22
    • 2021-12-26
    • 1970-01-01
    • 2011-07-27
    • 2015-04-20
    • 2021-07-26
    • 2013-12-05
    • 1970-01-01
    相关资源
    最近更新 更多