簡體   English   中英

收到“選擇一個有效選項。該選項不是可用選項之一。” 同時將 Djongo ForeignKey 與 Django 一起使用

[英]Receiving "Select a valid choice. That choice is not one of the available choices." while using Djongo ForeignKey with Django

使用 djongo.models 中的 ForeignKey 時,我在 Django Admin 中遇到了這個奇怪的錯誤。 不確定我是否在模型文件中做錯了什么。 錯誤信息圖片

機器/模型.py

from djongo import models


class Machine(models.Model):
    _id = models.ObjectIdField(primary_key=True)
    machine_type = models.TextField(null=False)
    machine_description = models.TextField(null=False)

    def __str__(self):
        return self.machine_type


# Create your models here.
class Errorcode(models.Model):
    _id = models.ObjectIdField(primary_key=True)
    code_name = models.TextField(null=False)
    machine_type = models.ForeignKey('Machine', on_delete=models.CASCADE)
    description = models.TextField(null=False)
    instruction = models.TextField(null=False)

    def __str__(self):
        return self.code_name


class AdditionalFile(models.Model):
    error_code = models.ForeignKey('Errorcode', on_delete=models.CASCADE)
    file_name = models.TextField(blank=True)
    file_path = models.FileField(blank=True, upload_to='static/asset')

    def __str__(self):
        return self.file_name

如果需要任何其他文件來檢查問題,我可以在此處添加代碼。

好的,所以我以某種方式找到了解決此問題的解決方法。 問題出在Django內置的ForeignKey,djongo沒有覆蓋ForeignKey適配mongoDB的ObjectID,導致Django混淆了使用ObjectID作為PK。

所以解決方法是更新 id 並使用 IntegerField 作為 PK

class Machine(models.Model):
    id = models.IntegerField(primary_key=True, unique=True)
    machine_type = models.TextField(null=False)
    machine_description = models.TextField(null=False)

    object = models.DjongoManager()

    def __str__(self):
        return self.machine_type


# Create your models here.
class Errorcode(models.Model):
    id = models.IntegerField(primary_key=True, unique=True)
    code_name = models.TextField(null=False)
    machine_type = models.ForeignKey(to=Machine, to_field='id', on_delete=models.CASCADE)
    description = models.TextField(null=False)
    instruction = models.TextField(null=False)

    object = models.DjongoManager()

    def __str__(self):
        return self.code_name
.
.
.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM