首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过模型向M2M添加数据

通过模型向M2M添加数据
EN

Stack Overflow用户
提问于 2019-06-17 13:18:12
回答 2查看 51关注 0票数 0

我试图为我的数据库记录一个基于网络的课程规划应用程序。我担心的是无法在中间表中记录views.py中的关系views.py,但是它在浏览器中的shell中工作,我有一个ValueError :精确查找的QuerySet值必须限制在一个使用切片的结果上。

反向切换到复制和粘贴视图

代码语言:javascript
复制
C:\Program Files\Python37\lib\site-packages\django\core\handlers\exception.py in inner

                response = get_response(request)

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\core\handlers\base.py in _get_response

                    response = self.process_exception_by_middleware(e, request)

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\core\handlers\base.py in _get_response

                    response = wrapped_callback(request, *callback_args, **callback_kwargs)

     ...
▶ Local vars
E:\PLACORESA\configuration\views.py in departemnent

                cursus = get_object_or_404(Cursus, libelle_cursus=cursus )

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\shortcuts.py in get_object_or_404

            return queryset.get(*args, **kwargs)

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\db\models\query.py in get

            num = len(clone)

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\db\models\query.py in __len__

            self._fetch_all()

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\db\models\query.py in _fetch_all

                self._result_cache = list(self._iterable_class(self))

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\db\models\query.py in __iter__

            results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\db\models\sql\compiler.py in execute_sql

                sql, params = self.as_sql()

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\db\models\sql\compiler.py in as_sql

                    where, w_params = self.compile(self.where) if self.where is not None else ("", [])

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\db\models\sql\compiler.py in compile

                sql, params = node.as_sql(self, self.connection)

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\db\models\sql\where.py in as_sql

                    sql, params = compiler.compile(child)

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\db\models\sql\compiler.py in compile

                sql, params = node.as_sql(self, self.connection)

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\db\models\lookups.py in as_sql

            rhs_sql, rhs_params = self.process_rhs(compiler, connection)

     ...
▶ Local vars
C:\Program Files\Python37\lib\site-packages\django\db\models\lookups.py in process_rhs

                        'The QuerySet value for an exact lookup must be limited to '

     ...
▶ Local vars 

models.py

代码语言:javascript
复制
class Departement(models.Model):
    code_departement=models.CharField("code du département", max_length=100, unique=True)
    libelle_departement=models.CharField("Libellé du département", max_length=100)
    faculte=models.ForeignKey("Faculte", on_delete=models.CASCADE)
    cursus=models.ManyToManyField("Cursus", through="AvoirCursus")   

class Cursus(models.Model):
    code_cursus=models.CharField("Code du cursus", max_length=10, unique=True)
    libelle_cursus=models.CharField("Libellé du cursus", max_length=100) 

class AvoirCursus(models.Model):
    cursus=models.ForeignKey("Cursus", on_delete=models.CASCADE)
    departement=models.ForeignKey("Departement", on_delete=models.CASCADE)

views.py

代码语言:javascript
复制
if request.method == 'POST':
        f = forms.Departement_Form(request.POST)
        if f.is_valid():
            dept = f.save(commit=False)
            code_departement = f.cleaned_data['code_departement'].upper()
            dept.code_departement = code_departement
            cursus = f.cleaned_data['cursus']
            dept.save()
            cursus = get_object_or_404(Cursus, libelle_cursus=cursus )

            AvoirCursus(departement=dept, cursus=cursus)

            return redirect('configuration:lister_departement')
EN

回答 2

Stack Overflow用户

发布于 2019-06-17 13:51:13

你确定那个cursus对象工作正常吗?也许表单中的cursus返回多个值或字符串?

同时,尝试在get_or_404之后添加打印(Cursus),并查看里面的内容。

你到底想在这里做什么?

AvoirCursus(departement=dept,cursus=cursus)

你确定这不应该是

AvoirCursus.objects.create(departement=dept,cursus=cursus)

在没有堆栈跟踪的情况下很难找到答案。

票数 0
EN

Stack Overflow用户

发布于 2019-06-20 17:05:51

我成功地解决了我的遗嘱。视图中使用的表单是来自models.py的泛型表单。当我打印(Cursus)结果是在中间数据库中包含选定的items.To写的查询集时,我将"cursus“的过程设置为具有不同的对象。

代码语言:javascript
复制
**the views.py is:**
if f.is_valid():
            dept = f.save(commit=False)
            code_departement = f.cleaned_data['code_departement']
            dept.code_departement = code_departement
            print(code_departement)
            cursus = f.cleaned_data['cursus']
            dept.save()
            for i in cursus:
                AvoirCursus.objects.create(departement=dept, cursus=i)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56632185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档