Ale*_*and 4 django django-forms
我需要在添加视图中设置正在创建帖子的用户:
@login_required
def add(request):
if request.method == 'POST':
form = BusinessForm(request.POST)
form.user_id = request.user.id
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('listing.views.detail'), args=(f.id))
else:
form = BusinessForm()
return render_to_response('business/add.html', {'form':form},
context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
我分配了用户ID,form.user_id = request.user.id但在保存时,它仍然给我一个错误Column user_id cannot be null
难道我做错了什么?谢谢
编辑:
我从模型中的表单中排除用户:
class BusinessForm(ModelForm):
class Meta:
model = Business
exclude = ('user',)
Run Code Online (Sandbox Code Playgroud)
这会导致问题吗?我该如何解决这个问题?
编辑2:
按照建议编辑了我的BusinessForm()类但没有工作:
class BusinessForm(ModelForm):
class Meta:
model = Business
exclude = ('user',)
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
return super(BusinessForm, self).__init__(*args, **kwargs)
def save(self, *args, **kwargs):
kwargs['commit']=False
obj = super(BusinessForm, self).save(*args, **kwargs)
if self.request:
obj.user = self.request.user
obj.save()
Run Code Online (Sandbox Code Playgroud)
商业模式
class Business(models.Model):
name = models.CharField(max_length=200)
user = models.ForeignKey(User, unique=False)
description = models.TextField()
category = models.ForeignKey(Category)
address = models.CharField(max_length=200)
phone_number = models.CharField(max_length=10)
website = models.URLField()
image = models.ImageField(upload_to='business_pictures',blank=True)
Run Code Online (Sandbox Code Playgroud)
Yuj*_*ita 11
您不必为此使用init或save覆盖.
您只需在表单上设置属性,表单不会对其执行任何操作.它没有神奇地表现得像一个模型实例(你的表单没有user_id属性).
由于您的表单是a ModelForm,您可以简单地调用save commit=False来获取未保存的实例,设置用户,然后调用save实例.
if request.method == 'POST':
form = BusinessForm(request.POST)
if form.is_valid():
business = form.save(commit=False)
business.user = request.user
business.save()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2721 次 |
| 最近记录: |