【发布时间】:2011-01-27 19:20:06
【问题描述】:
更新:我最终创建了一个新的 forms.Form 而不是使用 ModelForm
在 ModelForm 中,我通过排除字段并添加新字段来替换它 具有相同的名称,如下所示的 AddRestaurantForm。保存时 带有如下所示代码的表单,我在 form.save_m2m() 中收到错误 (“截断不正确的 DOUBLE 值”),这似乎是由于 函数尝试保存标记字段,而它被排除在外。
save_m2m() 函数是否应该保存排除的字段?
我的代码有什么问题吗?
谢谢
七月
(...)
new_restaurant = form.save(commit=False)
new_restaurant.city = city
new_restaurant.save()
tags = form.cleaned_data['tag']
if(tags!=''): tags=tags.split(',')
for t in tags:
tag, created = Tag.objects.get_or_create(name = t.strip())
tag.save()
new_restaurant.tag.add(tag)
new_restaurant.save()
form.save_m2m()
models.py
class Tag(models.Model):
name = models.CharField(max_length=100, unique=True)
class Restaurant(models.Model):
name = models.CharField(max_length=50)
city=models.ForeignKey(City)
category=models.ManyToManyField(Category)
tag=models.ManyToManyField(Tag, blank=True, null=True)
forms.py
class AddRestaurantForm(ModelForm):
name = forms.CharField(widget=forms.TextInput(attrs=classtext))
city = forms.CharField(widget=forms.TextInput(attrs=classtext), max_length=100)
tag = forms.CharField(widget=forms.TextInput(attrs=classtext), required=False)
class Meta:
model = Restaurant
exclude = ('city','tag')
追溯:
文件“/var/lib/python-support/python2.5/django/core/handlers/base.py” 在 get_response
92. 响应 = 回调(请求,*callback_args,
**callback_kwargs) addRestaurant 中的文件“/home/jul/atable/../atable/resto/views.py”
498. form.save_m2m() 文件“/var/lib/python-support/python2.5/django/forms/models.py”中
保存_m2m
75. f.save_form_data(instance,cleaned_data[f.name]) 文件“/var/lib/python-support/python2.5/django/db/models/fields/
相关.py”在 save_form_data
967. setattr(instance, self.attname, data) 文件"/var/lib/python-support/python2.5/django/db/models/fields/
设置
中的related.py” 627. manager.add(*value) 文件"/var/lib/python-support/python2.5/django/db/models/fields/
相关的.py”在添加
430. self._add_items(self.source_col_name, self.target_col_name, *objs) 文件 "/var/lib/python-support/python2.5/django/db/models/fields/
_add_items
中的related.py” 497. [self._pk_val] + list(new_ids)) 文件“/var/lib/python-support/python2.5/django/db/backends/util.py”在
执行
19.返回self.cursor.execute(sql, params)文件“/var/lib/python-support/python2.5/django/db/backends/mysql/
base.py”在执行
84. return self.cursor.execute(query, args) File "/var/lib/python-support/python2.5/MySQLdb/cursors.py" 在执行
168. if not self._defer_warnings: self._warning_check() File "/var/lib/python-support/python2.5/MySQLdb/cursors.py" in
_warning_check
82. warn(w[-1], self.Warning, 3) 文件 "/usr/lib/python2.5/warnings.py" in warn
62. globals) 文件 "/usr/lib/python2.5/warnings.py" 在 warn_explicit
102. 提出消息异常类型:/restaurant/add/ 处的警告异常值: 截断不正确的 DOUBLE 值:'a'
【问题讨论】:
-
您在表单中定义
name但不排除它,它是在餐厅模型中定义的。尽管您不需要在表单中再次定义它,但我会这样做。 -
是的,我这样做是为了向小部件添加属性。