Django不能使用OneToOneField从另一个表中查询数据



我创建了这样的django模型,其中设置表的api_key是OneToOneField to Key表。

class Key(models.Model):

api_key=models.CharField(max_length=100,unique=True)
api_key_name=models.CharField(max_length=100)

def __str__(self):
return self.api_key
class Setting(models.Model):
api_key=models.OneToOneField(Key,on_delete=models.CASCADE)
field_en=models.BooleanField(default=False)
def __str__(self):
return str(self.api_key)

我像这样添加数据到表Key。

api_key="abc1"
api_key_name="test"

在views.py中,我使用key进行如下代码的查询。

def keyForm(request):
key="abc1"
data, created = Setting.objects.get_or_create(api_key__api_key=key)
key = Key.objects.get(api_key=key)
data = {'setting':data, 'key':key}
return render(request,'key_form.html', data)

表中的数据键它显示了这样的误差。如何解决这个问题?

MySQLdb._exceptions.OperationalError: (1048, "Column 'api_key_id' cannot be null")
IntegrityError at /keyForm
(1048, "Column 'api_key_id' cannot be null")

data, created = Setting.objects.get_or_create(api_key__api_key=key)改为data, created = Setting.objects.get_or_create(api_key_id=key)。应该工作。

但是如果你也验证key会更好:

from django.shortcuts import get_object_or_404
def key_form(request):
key="abc1"
key_instance = get_object_or_404(Key, api_key=key)
data, created = Setting.objects.get_or_create(api_key=key_instance)
key = Key.objects.get(api_key=key)
data = {'setting':data, 'key':key}
return render(request,'key_form.html', data)
  1. 您正在链接设置到DeviceKey,而不是Key
class Setting(models.Model):
api_key=models.OneToOneField(DeviceKey,on_delete=models.CASCADE)
field_en=models.BooleanField(default=False)
def __str__(self):
return str(self.api_key)
  1. 你得到的错误在key_form视图,因为当你创建一个Settings对象时,你提供了一个键值作为参数,而在Django中它不是这样工作的。您需要提供有效的密钥实例作为参数。

Zorking提供的代码解释了如何做到这一点。

相关内容

  • 没有找到相关文章

最新更新