- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
保存表单时出现此错误:""需要为字段 "surveythread"设置一个值,然后才能使用这种多对多关系。
模型.py:
class SurveyResult(models.Model):
stay = models.OneToOneField(Stay, related_name='survey')
created = models.DateTimeField(default=datetime.now)
vote = models.BooleanField(default=False)
vote_service = models.BooleanField(default=False)
comment = models.TextField(blank=True, null=True)
def getThreads(self):
return SurveyThread.objects.filter(parent_survey = self)
threads = property(getThreads)
def __unicode__(self):
return self.vote and 'Good' or 'Bad'
class Meta:
get_latest_by = '-created'
class SurveyThread(models.Model):
survey = models.ManyToManyField(SurveyResult, related_name='parent_survey')
email = models.EmailField(max_length=200)
comment = models.TextField(blank=True, null=True)
views.py:
survey_list = SurveyResult.objects.filter(stay__guest__user=request.user) \
.select_related('stay', 'stay__guest')
forms = {}
for survey in survey_list:
forms[survey] = SurveyThreadForm(data=request.POST or None, survey=survey)
if forms[survey].is_valid():
instance = forms[survey].save()
return redirect('.')
forms.py
class SurveyThreadForm(forms.Form):
comment = forms.CharField(required=False, widget=forms.Textarea)
def __init__(self, *args, **kwargs):
self.survey = kwargs.pop('survey', None)
if not self.survey:
raise NotImplementedError("SurveyResult object is required at this moment")
super(SurveyThreadForm, self).__init__(*args, **kwargs)
self.fields['comment'].label = "Message to send to guest:"
def save(self, commit=True):
s = SurveyThread()
s.survey = self.survey
s.email = "test@test.com"
s.comment = self.cleaned_data['comment']
if commit:
s.save()
return s
错误信息:
ValueError at /
"<SurveyThread: SurveyThread object>" needs to have a value for field "surveythread" before this many-to-many relationship can be used.
Request Method: POST
Request URL: http://127.0.0.1:8000/
Django Version: 1.5.1
Exception Type: ValueError
Exception Value:
"<SurveyThread: SurveyThread object>" needs to have a value for field "surveythread" before this many-to-many relationship can be used.
Exception Location: /Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/django/db/models/fields/related.py in __init__, line 586
Python Executable: /Users/tlovett1/.virtualenvs/guestretain/bin/python
Python Version: 2.7.2
Python Path:
['/Users/tlovett1/guestretain',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python27.zip',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/plat-darwin',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/plat-mac',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/plat-mac/lib-scriptpackages',
'/Users/tlovett1/.virtualenvs/guestretain/Extras/lib/python',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/lib-tk',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/lib-old',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/lib-dynload',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages',
'/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/PIL']
Server time: Sun, 7 Jul 2013 10:22:55 -0500
追溯:
Traceback Switch to copy-and-paste view
/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/django/core/handlers/base.py in get_response
response = callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
/Users/tlovett1/guestretain/retain/apps/profiles/utils.py in _wrapped_view
return view_func(request, *args, **kwargs) ...
▶ Local vars
/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/endless_pagination/decorators.py in decorated
return view(request, *args, **kwargs) ...
▶ Local vars
/Users/tlovett1/guestretain/retain/apps/dashboard/views.py in dashboard
instance = forms[survey].save() ...
▶ Local vars
/Users/tlovett1/guestretain/retain/apps/surveys/forms.py in save
s.survey = self.survey ...
▶ Local vars
/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/django/db/models/fields/related.py in __set__
manager = self.__get__(instance) ...
▶ Local vars
/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/django/db/models/fields/related.py in __get__
through=self.field.rel.through, ...
▶ Local vars
/Users/tlovett1/.virtualenvs/guestretain/lib/python2.7/site-packages/django/db/models/fields/related.py in __init__
(instance, source_field_name)) ...
▶ Local vars
我是 Django 和 Python 的新手。如果需要,我可以发布调试跟踪或迁移文件,但我觉得这是一个简单的修复。显然重点是我想为每个调查结果保存多个调查线程。
谢谢!
最佳答案
好的,代码有点乱,我相信你会更好tackling your problem with ModelForms
.在我看来问题实际上是行:
s.survey = self.survey
因为 s
对象尚未写入数据库,因此访问它的 survey
ManyToMany 字段可能会产生问题。如果您想将同一组调查从 self
复制到 s
您应该像这样迭代它们:
如果这会产生相同的错误,则尝试先执行 s.save()
,然后再复制项目:
s.save()
for item in self.survey:
s.survey.add(item)
您的代码可能仍然是这样的:
def save(self, commit=True):
s = SurveyThread()
# these fields aren't problematic
s.email = "test@test.com"
s.comment = self.cleaned_data['comment']
# you can add s.save() here to remove problems associated with object
# not yet persisted
# s.save()
for item in self.survey:
s.survey.add(item)
if commit:
s.save()
return s
我可以看到您有一个 if commit:
来持久化对象,因此请尝试容纳代码以使用它。如果我的答案的第一个版本有效,那么您最后可以使用 s.save()
,如果第二个版本是有效的,那么您将不得不调整代码有点坚持 commit
值。
希望这会有所帮助!
关于python - Django 错误 : needs to have a value for field "..." before this many-to-many relationship can be used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17505935/
我想知道,如果我的函数没有相似的名称,我是否需要使用命名空间? 另外我无法掌握从特定文件夹导入所有命名空间的方法... 最佳答案 I'm wondering, that if my functions
我运行 2to3 -f all -f idioms -f buffer -f set_literal -f ws_comma foo.py 输出: RefactoringTool: No change
我对 RoR 还是很陌生,我正在尝试使用 button_to delete 按钮删除一个对象。但是,使用我编写的代码,当我尝试将它获取到 destroy 方法的/needs/:id 时,它会将我带到/
当我运行代码时,我在 DEBUG Console 中发现了这个错误如下图所示错误: Restarted application in 2,804ms. [38;5;248m════════ Excep
我有一个实现 __dir__ 方法的类。但是,我并不完全确定 dir API 的一些细节。 A:__dir__ 是否真的需要返回一个列表?我的实现是使用 set 来避免两次列出属性,我需要在返回之前将
我正在尝试执行对非官方 Instagram API python 库的调用,在我修复了几个需要依赖项的错误之后,我被困在了这个错误上。 File "C:\Users\Pablo\Desktop\tx
我正在使用 SingleChildScrollView 和 Column 来显示滑动条和 gridview。 如果我在我的专栏中使用一些其他小部件,如文本、图像,应用程序显示正常。但是我的swiper
我正在尝试卸载 zsh 插件 (macos),我修改了 .zshrc 文件并从 中删除了 macos >plugin 列表,并删除路径 ~/.oh-my-zsh/plugins 中的 macos 文件
我正在尝试卸载 zsh 插件 (macos),我修改了 .zshrc 文件并从 中删除了 macos >plugin 列表,并删除路径 ~/.oh-my-zsh/plugins 中的 macos 文件
Exception caught by rendering library ═════════════════════════════════ RenderBox was not laid out:
我对 Python 很陌生。我正在试用 threading模块。我遇到了 Event对象。 事件对象有wait set clear职能。我了解等待、设置和清除正在做什么。但是我不太明白为什么会有一个单
我需要在 SQL Server 的 sql 查询中转义 [ select * from sometable where name like '[something]'; 我实际上正在寻找某个东西之前的
我的要求是这样的: 我在数据库和时区中保存以毫秒为单位的时间。例如,以毫秒为单位的时间是 1223123123232长时区是 Asia/Calcutta 。我必须将其转换为 Africa/Asmara
我的表中有两个整数列,其中第一列填充了一些随机数,第二列为空。现在是否可以将第一列按升序排序,同时按降序排序并显示为第二列?我有下表的示例。 初始表: col1 col2 5 7 3 9
我正在使用 Instruments 检查我的应用程序的内存泄漏并向我展示: NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ChangeAcc
我有课 class Person { // some other fields for this object std::vector relatives; } 然后是一个返回 Person
在下面的代码中,为什么需要 .page-wrap:after? 理论上,如果没有这个,粘性页脚不应该工作吗?为什么不呢? * { margin: 0; } html, body { heigh
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我看过维基百科的图数据库,还是不明白。 什么是“无索引邻接”? 可不可以理解为“不是把主键存到其他表的行,而是直接存这些行的物理位置” 最佳答案 当您的数据可以表示为图形( map 上的路线、一些树等
我是 AngularJS 的新手,但我真的很喜欢 AngularJS 的工作方式,所以我想将它部署为我的 Google 云端点后端的客户端。然后我立即遇到两个问题: 1、放在哪里myCallback
我是一名优秀的程序员,十分优秀!