python - 收到“选择一个有效的选择。该选择不是可用的选择之一。” 在 Django 中使用 Djongo ForeignKey
问题描述
使用 djongo.models 中的 ForeignKey 时,我在 Django Admin 中遇到了这个奇怪的错误。不确定我在模型文件中是否做错了什么。 错误信息图片
机器/models.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
.
.
.
推荐阅读
- android - 任务':android:transformClassesAndResourcesWithProguardForRelease'的java.lang.NullPointerException和执行失败
- javascript - Javascirpt:如何将 JSON 响应作为参数从 onreadystatechange 传递?
- list - 在 Prolog 中保持顺序的同时删除重复项
- shutterstock - ValidationError:订阅不可用或找不到。许可失败
- ios - 避免在表格加载之前显示表格视图部分标题 - ios - swift
- bash - Bash 命令行 arg 选择要循环遍历的字符串数组
- openssl - openssl 1.1.1 配置失败
- javascript - 为什么我不能将此道具传递给子组件?
- c++ - 如何将字符串转换为对象类型?
- android - 预填充数据库 Kotlin