我收到异常:“QuerySet”对象没有属性“client”,其中 client 被定义为一对多关系上的外键

问题描述 投票:0回答:1

以下是有关该问题的日志条目。

2023-09-25 10:29:25,768 - facebookapi.fetchMetadata - CRITICAL - about to save to master
2023-09-25 10:29:25,771 - facebookapi.fetchMetadata - CRITICAL - Master exists now update...
2023-09-25 10:29:25,773 - facebookapi.fetchMetadata - CRITICAL - _master.save() Exception: 'QuerySet' object has no attribute 'client'

这里有两个模型Client和Master

class Client(models.Model):
    id = models.BigAutoField(primary_key=True),
    name = models.CharField(max_length=200, blank=False, null=True)
    #more fields abbreviated

class Master(models.Model):
    id = models.BigAutoField(primary_key = True)
    client = models.ForeignKey(Client, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    user_metadata = models.JSONField(max_length=5000, null=True, blank=True)
    user_id = models.CharField(max_length=500, blank=False, null = True)
    user_name = models.CharField(max_length=500, blank=False, null = True)
    #more fields abbreviated

以及生成错误的代码。

logger.critical("about to save to master+++++++++++++++++++++OOOOOOOOOOOO+++++++++++++")

        try:
            _master = Master.objects.filter(client=client_fk) 
            if _master is None:
                logger.critical("Master does not exist now create...")
                new_master = Master.objects.create()
                new_master.client = client_fk
                new_master.user_id = user_id
                new_master.user_name = result["name"]
                new_master.user_apprequests = _connections1["apprequests"]
                new_master.user_business_users = _connections1["business_users"]
                new_master.user_businesses = _connections1["businesses"]
                new_master.user_accounts = _connections1["accounts"]
                new_master.user_adaccounts = _connections1["adaccounts"]
                new_master.user_assigned_ad_accounts = _connections1["assigned_ad_accounts"]
                new_master.user_assigned_pages = _connections1["assigned_pages"]
                new_master.user_permissions = _connections1["permissions"]
                new_master.user_personal_ad_accounts = _connections1["personal_ad_accounts"]
                new_master.user_metadata = result["metadata"]
                new_master.account_status = "created"

                new_master.save()
            else:
                logger.critical("Master exists now update...")
                logger.critical("Master.client: %s", _master.client)
                #_master.client = client_fk
                _master.user_id = user_id
                _master.user_name = result["name"]
                _master.user_apprequests = _connections1["apprequests"]
                _master.user_business_users = _connections1["business_users"]
                _master.user_businesses = _connections1["businesses"]
                _master.user_accounts = _connections1["accounts"]
                _master.user_adaccounts = _connections1["adaccounts"]
                _master.user_assigned_ad_accounts = _connections1["assigned_ad_accounts"]
                _master.user_assigned_pages = _connections1["assigned_pages"]
                _master.user_permissions = _connections1["permissions"]
                _master.user_personal_ad_accounts = _connections1["personal_ad_accounts"]
                _master.user_metadata = result["metadata"]
                new_master.account_status = "updated"

                _master.save()

            return Response("Master saved", status=status.HTTP_200_OK)
        except Exception as e:
            logger.critical("_master.save() Exception: %s", e)
            return Response(e, status=status.HTTP_400_BAD_REQUEST)
        

我尝试将过滤器更改为“client_id”,我尝试修改模型,使客户端变为client_id,并进行迁移,但错误抱怨找不到client_id_id

我尝试删除外键,然后迁移,然后将其添加回来并再次迁移,但无济于事

接下来我可以尝试什么?我应该创建一个新的 Master2 模式吗?我应该终止所有迁移并重新开始吗?

目标是如果没有记录则创建一条新记录,如果有记录则更新当前记录。

我是否应该放弃整个外键思维并使用代码来确保关系?

谢谢,

django foreign-keys one-to-many
1个回答
0
投票

答案是将“过滤器”更改为“获取”,问题就消失了。

© www.soinside.com 2019 - 2024. All rights reserved.