TypeError: __init__() got multiple values for keyword argument 'to_fields'
from django.db import modelsclass Userinfo(models.Model):
name=models.CharField(verbose_name="姓名",max_length=32)
password=models.CharField(max_length=64)
age=models.CharField(max_length=12)
daa=models.CharField(max_length=12)
gen=models.CharField(max_length=12)
defs= models.ForeignKey(to="Uerv",to_fields="name",on_delete=models.CASCADE)
def __str__(self):
return self.defs
class Uer(models.Model):
name=models.CharField(max_length=32)
password=models.CharField(max_length=64)
age=models.IntegerField()
报错信息是:
TypeError: __init__() got multiple values for keyword argument 'to_fields'
哪位大佬帮忙看看
您在Userinfo模型的defs字段中使用了to_fields参数,但是在Django的ForeignKey字段中,应该使用to_field参数。此外,to_field应该设置为关联模型的唯一字段,例如“id”或者其他具有唯一性的字段。以下是修正后的代码:
from django.db import models
class Userinfo(models.Model):
name=models.CharField(verbose_name="姓名",max_length=32)
password=models.CharField(max_length=64)
age=models.CharField(max_length=12)
daa=models.CharField(max_length=12)
gen=models.CharField(max_length=12)
defs= models.ForeignKey(to="Uer", to_field="id", on_delete=models.CASCADE)
def __str__(self):
return self.defs
class Uer(models.Model):
name=models.CharField(max_length=32)
password=models.CharField(max_length=64)
age=models.IntegerField()
这里,我将to="Uerv"更改为to="Uer",并将to_fields="name"更改为to_field="id"。您可以根据需要使用其他具有唯一性的字段。现在,这段代码应该可以正常运行。 isdkz 发表于 2023-4-16 19:57
您在Userinfo模型的defs字段中使用了to_fields参数,但是在Django的ForeignKey字段中,应该使用to_field参 ...
to_field和to_fields有什么区别吗 tengke 发表于 2023-4-16 21:10
to_field和to_fields有什么区别吗
在Django中,to_field 和 to_fields 之间存在一定的差别。它们都用于定义关联模型的字段,但在不同的场景下使用。
1、to_field:它是ForeignKey的一个参数,用于指定关联模型的哪个字段。通常,这个字段应该具有唯一性(如主键或具有unique=True属性的字段)。当创建一个ForeignKey关联时,Django将使用to_field来指明将要关联的模型字段。
例如:
class Author(models.Model):
name = models.CharField(max_length=100, unique=True)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, to_field='name', on_delete=models.CASCADE)
在这个例子中,Book模型的author字段通过ForeignKey关联到Author模型,我们指定to_field='name',意味着Book的author字段将使用Author模型中具有唯一性的name字段作为关联。
2、to_fields:它是OneToOneField的一个参数,从Django 3.2开始引入。它允许您指定多个字段来定义一个联合唯一约束,也就是说,您可以在关联模型上指定多个字段作为关联依据。
例如:
class Address(models.Model):
street = models.CharField(max_length=100)
city = models.CharField(max_length=100)
zip_code = models.CharField(max_length=10)
class Meta:
unique_together = [['street', 'city', 'zip_code']]
class Person(models.Model):
name = models.CharField(max_length=100)
address = models.OneToOneField(Address, to_fields=('street', 'city', 'zip_code'), on_delete=models.CASCADE)
在这个例子中,Person模型的address字段通过OneToOneField关联到Address模型,我们指定to_fields=('street', 'city', 'zip_code'),意味着Person的address字段将使用Address模型中的三个字段(street、city和zip_code)组成的联合唯一约束作为关联依据。
总结一下,to_field用于ForeignKey关联,用于指定关联模型的唯一字段,而to_fields用于OneToOneField关联,用于指定关联模型的多个字段作为联合唯一约束。
页:
[1]