我收到错误消息:TypeError:%中不支持的操作数类型:Django中的'DeferredAttribute'和'dict'

我在django rest freamework应用程序中创建了新模型,并且出现了此错误消息:

TypeError: unsupported operand type(s) for %: 'DeferredAttribute' and 'dict'

这是错误屏幕截图:

我收到错误消息:TypeError:%中不支持的操作数类型:Django中的'DeferredAttribute'和'dict'

我不明白是什么问题?

这是我的models.py

from django.db import models

class TblUseraccounts(models.Model):
    uid = models.AutoField(primary_key=True)
    username = models.CharField(unique=True,max_length=20)
    alias_username = models.CharField(unique=True,max_length=20,blank=True,null=True)

    class Meta:
        managed = False
        db_table = 'tbl_user_accounts'
        ordering = ['uid']


class TblUserDetails(models.Model):
    detail_id = models.IntegerField(primary_key=True)
    useraccount = models.ForeignKey(TblUseraccounts,models.DO_NOTHING,related_name=TblUseraccounts.uid)
    first_name = models.CharField(max_length=25,null=True)
    last_name = models.CharField(max_length=45,null=True)
    birthdate = models.DateTimeField(blank=True,null=True)
    record_time = models.DateTimeField()
    creator = models.ForeignKey(TblUseraccounts,related_name=TblUseraccounts.uid,db_column='creator')

    class Meta:
        managed = False
        db_table = 'tbl_user_details'
        ordering = ['record_time']


class TblUserPassword(models.Model):
    id_password = models.AutoField(primary_key=True)
    useraccount_id_pwd = models.ForeignKey(TblUseraccounts,db_column='useraccount_id_pwd')
    salt = models.CharField(max_length=200,null=True)
    hash = models.CharField(max_length=200,db_column='creator')

    class Meta:
        managed = False
        db_table = 'tbl_user_password'
        ordering = ['record_time']

您当然应该知道我是Python编程的新手。

我想问题出在TblUserDetails模型中,但是我不知道这是什么吗?

非常感谢您的关注。

lotusdy 回答:我收到错误消息:TypeError:%中不支持的操作数类型:Django中的'DeferredAttribute'和'dict'

如果无法测试,我真的只能在黑暗中投篮。不过,通过阅读,我认为问题在于您为related_name使用的内容。请尝试以下操作:

class TblUserDetails(models.Model):
    detail_id = models.IntegerField(primary_key=True)
    useraccount = models.ForeignKey(TblUserAccounts,models.DO_NOTHING,related_name='TblUserAccounts.uid')
    first_name = models.CharField(max_length=25,blank=True,null=True)
    last_name = models.CharField(max_length=45,null=True)
    birthdate = models.DateTimeField(blank=True,null=True)
    record_time = models.DateTimeField()
    creator = models.ForeignKey(TblUserAccounts,related_name='TblUserAccounts.uid',db_column='creator')

    class Meta:
        managed = False
        db_table = 'tbl_user_details'
        ordering = ['record_time']

请注意,如果这是问题所在,您还需要针对TblUserPassword进行此修复。

我认为related_name不应指向另一个类的属性,而只是一个名称字段:

  

ForeignKey.related_name

     

用于以下来源的关系的名称   相关的对象回到这一点。这也是   related_query_name(用于反向过滤器名称的名称,来自   目标模型)。有关完整信息,请参见相关对象文档。   说明和示例。请注意,您必须在以下情况下设置此值   在抽象模型上定义关系;当您这样做时,有些特别   语法可用。

     

如果您不希望Django不要创建反向关系,请设置   related_name为'+'或以'+'结尾。例如,这将确保   该用户模型不会与此模型保持反向关系。

user = models.ForeignKey(
    User,on_delete=models.CASCADE,related_name='+',)

让我知道这不是问题所在,我会看看是否还能找到其他东西。

本文链接:https://www.f2er.com/3093347.html

大家都在问