Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 保存数据后分配m2m关系时发生ValueError-基数为10的int()的文本无效:';音乐';_Python_Django_Object_Model_M2m - Fatal编程技术网

Python 保存数据后分配m2m关系时发生ValueError-基数为10的int()的文本无效:';音乐';

Python 保存数据后分配m2m关系时发生ValueError-基数为10的int()的文本无效:';音乐';,python,django,object,model,m2m,Python,Django,Object,Model,M2m,我正在创建一个具有许多属性的对象“Show”。它的一个属性是“categories”,这是一个多对多字段,与另一个对象“categories”相关 在创建“显示”之前(通过从传入对象获取数据),我将创建为其分配显示的类别,如下所示: for each_category in parsed_podcast.categories: Category.objects.get_or_create(title=each_category,

我正在创建一个具有许多属性的对象“Show”。它的一个属性是“categories”,这是一个多对多字段,与另一个对象“categories”相关

在创建“显示”之前(通过从传入对象获取数据),我将创建为其分配显示的类别,如下所示:

for each_category in parsed_podcast.categories:
        Category.objects.get_or_create(title=each_category,
                                        slug=slugify(each_category),
                                        full=each_category,
                                        )
上面的代码正在我的类别模型中创建对象,我可以检查并查看它们是否存在。一旦它们出现,接下来我创建Show对象,其中包含许多属性,我已将这些属性剥离,因为它们不相关:

try:
        podcast_instance = Show.objects.get(title=parsed_podcast.title)
except Show.DoesNotExist:
        podcast_instance = Show(title=parsed_podcast.title,
                    slug=slugify(parsed_podcast.title),
                    image_title=parsed_podcast.image_title,
                    image_url=parsed_podcast.image_url,
                    .....
                    )
       podcast_instance.save()

所有这些都可以正常工作,直到我现在尝试将类别(来自parsed_podcast.categories)分配给在第一步中创建的新类别,如下所示:

for each_category in parsed_podcast.categories:
            print('The category in the parsed podcast is {}'.format(each_category))
            podcast_instance.categories.add(each_category)
我永远不能分配类别-当我检查模型上的Django管理员时,它总是作为一个选项保留。我想以编程方式分配它,但我得到一个错误,错误是:

ValueError: invalid literal for int() with base 10: 'Music'
回溯:

Traceback (most recent call last):
  File "podcasts.py", line 211, in <module>
    podcast_s()
  File "populate.py", line 205, in podcast_scrape
    submit(parsed_podcast,podcast_rss)
  File "populate.py", line 118, in submit2
    podcast_instance.categories.add(each_category)

  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 926, in add
    self._add_items(self.source_field_name, self.target_field_name, *objs)
  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 1073, in _add_items
    '%s__in' % target_field_name: new_ids,
  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\query.py", line 844, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\query.py", line 862, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\sql\query.py", line 1263, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\sql\query.py", line 1287, in _add_q
    split_subq=split_subq,
  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\sql\query.py", line 1225, in build_filter
    condition = self.build_lookup(lookups, col, value)
  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\sql\query.py", line 1096, in build_lookup
    lookup = lookup_class(lhs, rhs)
  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\lookups.py", line 20, in __init__
    self.rhs = self.get_prep_lookup()
  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\fields\related_lookups.py", line 59, in get_prep_lookup
    self.rhs = [target_field.get_prep_value(v) for v in self.rhs]
  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\fields\related_lookups.py", line 59, in <listcomp>
    self.rhs = [target_field.get_prep_value(v) for v in self.rhs]
  File "C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\models\fields\__init__.py", line 965, in get_prep_value
    return int(value)
ValueError: invalid literal for int() with base 10: 'Music'
回溯(最近一次呼叫最后一次):
文件“podcasts.py”,第211行,在
播客(u s)
podcast_scrape中的文件“populate.py”,第205行
提交(已解析的播客、播客和rss)
submit2中第118行的文件“populate.py”
podcast_instance.categories.add(每个_类别)
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\fields\related\u descriptors.py”,第926行,添加
self.\添加\项(self.source\字段\名称、self.target\字段\名称、*objs)
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\fields\related\u descriptors.py”,第1073行,在添加项目中
“%s”在“%target”字段中\u名称:新\u ID,
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\query.py”,第844行,在过滤器中
返回self.\u filter\u或\u exclude(False、*args、**kwargs)
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\query.py”,第862行,在过滤器或排除中
clone.query.add_q(q(*args,**kwargs))
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\sql\query.py”,第1263行,在add\u q中
子句,self.\u添加(q\u对象,self.used\u别名)
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\sql\query.py”,第1287行,在添加
split_subq=split_subq,
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\sql\query.py”,第1225行,内置过滤器
条件=self.build\u查找(查找、列、值)
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\sql\query.py”,第1096行,内部版本查找
lookup=lookup\u类(左、右)
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\lookups.py”,第20行,在\uuu init中__
self.rhs=self.get\u prep\u lookup()
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\fields\related\u lookups.py”,第59行,在get\u prep\u lookup中
self.rhs=[target_field.get_prep_value(v)for v in self.rhs]
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\fields\related\u lookups.py”,第59行,在
self.rhs=[target_field.get_prep_value(v)for v in self.rhs]
文件“C:\Users\p\Anaconda3\envs\myDjangoEnv\lib\site packages\django\db\models\fields\\ uuuu init\uuuu.py”,第965行,在get\u prep\u值中
返回int(值)
ValueError:基数为10的int()的文本无效:“音乐”

我有一种感觉,我解析的podcast.categories中的内容并不总是相同的。是否有有效的方法每次清理这些数据?或者还有其他问题。

问题是,当您应该传递
pk
类别
对象时,您试图传递一个您解析的字符串

创建
类别时,请使用创建的对象

for each_category in parsed_podcast.categories:
       category, created = Category.objects.get_or_create(title=each_category,
                                        slug=slugify(each_category),
                                        full=each_category,
                                        )
       print('The category in the parsed podcast is {}'.format(each_category))
       podcast_instance.categories.add(category)

问题是,当您应该传递
pk
category
对象时,您正试图传递一个您解析过的字符串

创建
类别时,请使用创建的对象

for each_category in parsed_podcast.categories:
       category, created = Category.objects.get_or_create(title=each_category,
                                        slug=slugify(each_category),
                                        full=each_category,
                                        )
       print('The category in the parsed podcast is {}'.format(each_category))
       podcast_instance.categories.add(category)

那没有道理。你不能把绳子传过去。您需要在第一步中创建的类别实例。我不知道为什么有单独的循环-为什么不能一步完成?我认为您需要展示这三个片段是如何组合在一起的;在上下文中显示完整的代码。朋友,放松。虽然你可能已经习惯了这些事情,但OP是新的,他正试图理解如何做到这一点,因为他不知道如何与多对多合作。这没有意义。你不能把绳子传过去。您需要在第一步中创建的类别实例。我不知道为什么有单独的循环-为什么不能一步完成?我认为您需要展示这三个片段是如何组合在一起的;在上下文中显示完整的代码。朋友,放松。虽然你可能已经习惯了这些事情,但OP是新的,他正试图了解如何做到这一点,因为他不知道如何与多对多合作。嘿,谢谢-这就成功了。我不太清楚我是怎么理解的。在你有“类别,创建”的地方,我不完全理解这是在做什么。。。那么第一个变量“category”是实际对象?第二个是一个bool,看看它是否真的创建了对象……但是我还没有像那样对元组进行过太多的解包工作——我是个新手。这是一个元组解包,我将返回category对象,创建为True或False,然后在for循环中将新创建的category分配给Show。也许我真的明白了。谢谢。嘿,谢谢-这就行了。我不太清楚我是怎么理解的。在你有“类别,创建”的地方,我不完全理解这是在做什么。。。那么第一个变量“category”是实际对象?第二个是一个bool,看看它是否真的创建了对象……但是我还没有像那样对元组进行过太多的解包工作——我是个新手。所以