在将 Djongo 外键与 Django 一起使用时接收"Select a valid choice. That choice is not one of the available choices.



在Django Admin中使用Django .models中的ForeignKey时,我得到了这个奇怪的错误。不确定我是否在模型文件中做错了什么。错误信息图像

机器/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引起的,并且Django没有覆盖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
.
.
.

相关内容

最新更新