Python,Django ValueError:“<…>”需要有字段“…”的值,然后才能使用此manytomy关系

2024-09-28 19:32:47 发布

您现在位置:Python中文网/ 问答频道 /正文

尊敬的StackOverflow社区。 我的问题与在包含多个字段的表中插入新记录有关。在

我花了一整天的时间试图自己解决这个问题,阅读django文档,并在stackoverflow中冲浪。在

我的模型.py公司名称:

from django.db import models
from django_extensions.db.models import TimeStampedModel


class clans(TimeStampedModel):
    rfam_acc = models.CharField(max_length=7)
    rfam_id = models.CharField(max_length=40)
    description = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    comment = models.CharField(max_length=2000, null=True)

    class Meta:
        ordering = ('rfam_id',)

    def __str__(self):
        return self.rfam_id


class families(TimeStampedModel):
    rfam_acc = models.CharField(max_length=7)
    rfam_id = models.CharField(max_length=40)
    description = models.CharField(max_length=75)
    author = models.CharField(max_length=100)
    clan = models.ManyToManyField(clans, null=True, blank=True)
    comment = models.CharField(max_length=2000, null=True)

数据收集(从另一个数据库)和插入数据库的脚本:(这是从管理.py壳牌加)。在

^{pr2}$

最后是shell中的错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File         "/Users/work/Desktop/StructuRNA/website/scripts/SQLfromRfamIntoClansFamily.py", line 42, in run
clan=clan[1]
  File "/Users/work/Desktop/StructuRNA/.VirEnvStructuRna/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/work/Desktop/StructuRNA/.VirEnvStructuRna/lib/python3.6/site-packages/django/db/models/query.py", line 397, in create
obj = self.model(**kwargs)
  File "/Users/work/Desktop/StructuRNA/.VirEnvStructuRna/lib/python3.6/site-packages/django/db/models/base.py", line 550, in __init__
setattr(self, prop, kwargs[prop])
  File "/Users/work/Desktop/StructuRNA/.VirEnvStructuRna/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py", line 499, in __set__
    manager = self.__get__(instance)
  File "/Users/work/Desktop/StructuRNA/.VirEnvStructuRna/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py", line 476, in __get__
return self.related_manager_cls(instance)
  File "/Users/work/Desktop/StructuRNA/.VirEnvStructuRna/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py", line 783, in      __init__
   (instance, self.source_field_name))
 ValueError: "<families: families object>" needs to have a value for field "families" before this many-to-many relationship can be used.

有什么帮助吗? 我不明白什么不管用。在

另一件有趣的事是,在我的数据库中,我发现了第一个元素的插入(在我试图运行脚本时重复了很多次)。 对于m2m字段,此元素也有其正确的值。在


Tags: djangoinpyselfdbmodelslinelength
1条回答
网友
1楼 · 发布于 2024-09-28 19:32:47

在向ManyToManyField添加条目之前,需要创建“families”对象的实例

family = families.objects.create(
    rfam_acc=family[0],
    rfam_id=family[1],
    description=family[2],
    author=family[3],
    comment=family[4]
)

family.clan.add(clan[1])

另外,您可能对批量创建感兴趣:https://docs.djangoproject.com/en/1.10/ref/models/querysets/#bulk-create

相关问题 更多 >