• ValueError: Cannot assign "<QuerySet [<Area: China>]>": "Area.parent" must be a "Area" instance.


    在研究才Django自关联的过程中,在插入数据时爆出如下错误:

    ValueError: Cannot assign "<QuerySet [<Area: China>]>": "Area.parent" must be a "Area" instance.
    

    这是由于把QuerySet当作了instance传进去了。这里需要的拿到QuerySet中的具体实例对象,进行操作。

    模型如下:

    from django.db import models
    
    
    class Area(models.Model):
        """
        自关联表。
        自关联模型,就是表中的某一列,关联了这个表中的另外一列。最典型的自关联模型就是地区表。
        省、市、县都在一张表里面。省的pid为null,市的pid为省的id,县的pid为市的id。
        """
        name = models.CharField(max_length=32, verbose_name='行政区名称')
        parent = models.ForeignKey('self', verbose_name='上级行政区', on_delete=models.CASCADE, null=True)
    
        def __str__(self):
            return self.name
    
        class Meta:
            db_table = 'office_area'
            verbose_name = '行政区'
            verbose_name_plural = verbose_name
    

    屏幕日志:

    (DjangoPro) E:Project	utorials>python manage.py shell
    Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    >>> from polls.models import Area
    >>> Area.objects.all()
    <QuerySet [<Area: China>]>
    >>> Area.objects.create(name='Peking', parent='China')
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File "E:virtualenvsDjangoProlibsite-packagesdjangodbmodelsmanager.py", line 82, in manager_method
        return getattr(self.get_queryset(), name)(*args, **kwargs)
      File "E:virtualenvsDjangoProlibsite-packagesdjangodbmodelsquery.py", line 420, in create
        obj = self.model(**kwargs)
      File "E:virtualenvsDjangoProlibsite-packagesdjangodbmodelsase.py", line 483, in __init__
        _setattr(self, field.name, rel_obj)
      File "E:virtualenvsDjangoProlibsite-packagesdjangodbmodelsfields
    elated_descriptors.py", line 211, in __set__
        self.field.remote_field.model._meta.object_name,
    ValueError: Cannot assign "'China'": "Area.parent" must be a "Area" instance.
    >>> Area.objects.filter(name='China')
    >>> a = Area.objects.filter(name='China').first()
    >>> a
    <Area: China>
    >>> Area.objects.create(name='Peking', parent=a)
    <Area: Peking>
    
  • 相关阅读:
    嵌入式系统引导和启动的流程
    microblaze以太网程序
    机试题
    共模差分 对比
    xilinx XPS无法启动的问题
    FPGA开发流程
    Mel-Frequency-Warping
    微软-黄学东-清华大学FIT楼报告-20170407
    Matlab
    Anaconda安装
  • 原文地址:https://www.cnblogs.com/linga/p/11926060.html
Copyright © 2020-2023  润新知