【发布时间】:2017-12-30 11:47:07
【问题描述】:
我有这样的看法:
def view(request, ...):
user = request.user
company = get_object_or_404(Company, ...)
group = get_object_or_404(Group, ...)
form = TaskCreateForm()
if request.method == 'POST':
print(company)
print(group)
form = TaskCreateForm(data=request.POST)
if form.is_valid():
form.save(commit=False)
form.creator = user
form.company = company
form.group = group
# So these above attributes aren't actually inputs in the form, but just data passed to the model from things like the user that's sending off the form and the group they're in for example
form.save()
创建者(用户)和公司通过 ForeignKey 与此特定模型(任务,用户填写表单)相关联。
问题是我写form.group = group的地方,我怀疑这可能是因为Group与Task模型有ManyToMany关系。
我希望“组”成为与此任务对象相关的众多组对象之一。
尝试保存表单时出现错误,如下所示:
/company/task/625377380359841/ 处的类型错误 强制转换为 Unicode:需要 字符串或缓冲区,找到无类型
这将是一个很大的帮助,谢谢!
编辑: 我还查看了我认为可能相关的 save_m2m() 方法,但不幸的是这似乎没有帮助。
另外,这是我与 TaskCreateForm() 相关的表单和模型代码... forms.py:
class TaskCreateForm(forms.ModelForm):
task_name = forms.CharField(widget=forms.widgets.TextInput(attrs={
'placeholder':'Activity name'}), label='Activity', required=True, min_length=3, max_length=60)
task_priority = forms.ChoiceField(choices=PRIORITY, widget=forms.widgets.Select
(attrs={'placeholder':'Priority'}), label='Importance', required=False)
class Meta:
model = Activity
fields = ['task_name', 'task_priority']
models.py:
class Task(models.Model):
company = models.ForeignKey(Company, related_name='company_activity',
verbose_name='Parent Company', on_delete=models.CASCADE, null=True)
group = models.ManyToManyField(Group, related_name='group_activity',
verbose_name='Related Group', blank=True)
creator = models.ForeignKey(AUTH_USER_MODEL, related_name='activity_creator',
verbose_name='Created by User', null=True)
task_name = models.CharField(max_length=40, verbose_name='Task')
task priority = models.CharField(max_length=18, verbose_name='Priority',
choices=PRIORITY, blank=True, null=True)
task_slug = models.SlugField(verbose_name='Slug', unique=True, blank=True, null=True)
class Meta:
verbose_name = 'Task'
def __unicode__(self):
return self.task_slug
def __str__(self):
return self.task_slug
def get_absolute_url(self):
return reverse('task-detail', kwargs={'task_slug': self.task_slug, 'co_dom': self.company.domain})
def save(self, *args, **kwargs):
task_slug(self)
super(Task, self).save(*args, **kwargs)
完整追溯:
905093298449 |公司 625377380359841 内部服务器错误: /company/sourceup/opportunities/625377380359841/ Traceback(最近一次通话最后一次):文件 "/Library/Python/2.7/site-packages/Django-1.10.2-py2.7.egg/django/core/handlers/exception.py", 第 39 行,在内部 response = get_response(request) 文件“/Library/Python/2.7/site-packages/Django-1.10.2-py2.7.egg/django/core/handlers/base.py”, 第 187 行,在 _get_response response = self.process_exception_by_middleware(e, request) 文件“/Library/Python/2.7/site-packages/Django-1.10.2-py2.7.egg/django/core/handlers/base.py”, 第 185 行,在 _get_response 中 response = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件“/Users/jayt/grid/company/views.py”,第 181 行,在 task_detail act.parent_op.add(opport) 文件“/Library/Python/2.7/site-packages/Django-1.10.2-py2.7.egg/django/db/models/fields/related_descriptors.py”, 第 476 行,在 get 中 返回self.related_manager_cls(实例)文件“/Library/Python/2.7/site-packages/Django-1.10.2-py2.7.egg/django/db/models/fields/related_descriptors.py”, 第 783 行,在 init 中 (实例,self.source_field_name))文件“/Library/Python/2.7/site-packages/Django-1.10.2-py2.7.egg/django/db/models/base.py”, 第 572 行,在 repr 中 u = Six.text_type(self) TypeError: coercing to Unicode: need string or buffer, NoneType found [25/Jul/2017 17:42:51] "POST /company/task/625377380359841/HTTP/1.1" 500 81361
【问题讨论】:
-
添加一个 print(company) 和 print(group) 并告诉我返回什么
-
@MauricioCortazar 在哪里写这个?
-
If 请求之后 ==post 语句
-
这打印了公司的 unicode,然后是组的 unicode。错误紧随其后。
-
查看终端,看看打印了什么