更新:我结束了创建一个新的forms.Form代替使用的ModelFormDjango的save_m2m()和排除字段
在的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“
save_m2m
75. f.save_form_data(instance,cleaned_dat一个[f.name])文件“/var/lib/python-support/python2.5/django/db/models/fields/
related.py”in save_form_data
967. setattr(instance,self.attname,数据)文件 “/var/lib/python-support/python2.5/django/db/models/fields/
related.py” 在设置
627 manager.add(*值)文件“/无功/lib/python-support/python2.5/django/db/models/fields/
related.py “中添加
430 self._add_items(self.source_col_name,self.target_col_name,* OBJ文件)文件 ”/ var/lib/python-support/python2.5/django/db/models/fields/
related.py“in _add_items
497. [self._pk_val] + list(new_ids))文件”/var/lib/python-support/python2.5/django/db/backends/util.py“in
执行
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)执行中的文件“/var/lib/python-support/python2.5/MySQLdb/cursors.py”
168. if not self._defer_warnings:self._warning_check()文件“/ var/lib/python-support/python2。5/MySQLdb的/ cursors.py”在
_warning_check
82.警告(W [-1],self.Warning,3)文件 “/usr/lib/python2.5/warnings.py” 在警告
62 。全局)文件 “/usr/lib/python2.5/warnings.py” 在warn_explicit
102加薪消息异常类型:AT /餐厅警告/添加/异常值: 截断不正确DOUBLE值:' a'
您可以在表单中定义'name',但不排除它,它在餐厅模型中定义。我会尽管你不需要在表单中再次定义它。 – 2010-03-15 18:22:45
是的,我这样做是为了给widget添加属性。 – jul 2010-03-15 19:08:02