鱼C论坛

 找回密码
 立即注册
查看: 2554|回复: 3

[已解决]TypeError: __init__() got multiple values for keyword argument 'to_fields'

[复制链接]
发表于 2023-4-16 19:55:29 | 显示全部楼层 |阅读模式
5鱼币
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="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'



哪位大佬帮忙看看
最佳答案
2023-4-16 19:55:30
您在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"。您可以根据需要使用其他具有唯一性的字段。现在,这段代码应该可以正常运行。

最佳答案

查看完整内容

您在Userinfo模型的defs字段中使用了to_fields参数,但是在Django的ForeignKey字段中,应该使用to_field参数。此外,to_field应该设置为关联模型的唯一字段,例如“id”或者其他具有唯一性的字段。以下是修正后的代码: 这里,我将to="Uerv"更改为to="Uer",并将to_fields="name"更改为to_field="id"。您可以根据需要使用其他具有唯一性的字段。现在,这段代码应该可以正常运行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-16 19:55:30 | 显示全部楼层    本楼为最佳答案   
您在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"。您可以根据需要使用其他具有唯一性的字段。现在,这段代码应该可以正常运行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-16 21:10:48 | 显示全部楼层
isdkz 发表于 2023-4-16 19:57
您在Userinfo模型的defs字段中使用了to_fields参数,但是在Django的ForeignKey字段中,应该使用to_field参 ...

to_field和to_fields有什么区别吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-16 21:17:43 | 显示全部楼层
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关联,用于指定关联模型的多个字段作为联合唯一约束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 17:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表