在Listview中验证django模型表单之前,如何访问/修改django模型字段
我有一个具有以下属性的示范课程:在Listview中验证django模型表单之前,如何访问/修改django模型字段,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我有一个具有以下属性的示范课程: class Course(models.Model): user= models.ForeignKey( User, on_delete=models.CASCADE, ) # email= models.EmailField(default=user.email) courseName= models.CharField(max_length=20, blank=False) c
class Course(models.Model):
user= models.ForeignKey(
User,
on_delete=models.CASCADE,
)
# email= models.EmailField(default=user.email)
courseName= models.CharField(max_length=20, blank=False)
class Meta:
unique_together= ('user','courseName',)
def __str__(self):
return self.courseName
我已经创建了一个表单,我希望用户只输入courseName,在他们发布它之后,我也会将请求的用户添加到模型中
这是我的表单,它将通过我的ListView传递到模板
forms.py
class CourseForm(forms.ModelForm):
class Meta:
model= Course
fields = ['courseName']
**这是我正在努力解决的问题**
class CoursesListView(ListView, FormMixin):
model = Course
form_class = CourseForm
template_name = "userApp/courseList.html"
def get_queryset(self):
return Course.objects.filter(user__exact=self.request.user)
def get_context_data(self,*args,**kwargs):
context= super(CoursesListView,self).get_context_data(*args, **kwargs)
context['courseForm'] = self.form_class
return context
def post(self,request, *args, **kwargs):
form = self.form_class(request.POST)
user = User.objects.get(username__exact=self.request.user)
**I want to add the user to my model.user field here**
return self.get(redirect, *args, **kwargs)
def get(self,request, *args, **kwargs):
self.object=None
self.form = self.get_form(self.form_class)
return ListView.get(self, request, *args, **kwargs)
因此,基本上我的问题是,在调用表单之前,如何在模型中添加用户
def post(self,request, *args, **kwargs):
form_data = copy.copy(request.POST)
form_data['user'] = User.objects.get(username__exact=self.request.user).pk
form = self.form_class(form_data)
# form handling follows
return self.get(redirect, *args, **kwargs)
此答案是由删除此答案的用户建议的。没有得到他的用户id,但是无论你是谁,都非常感谢你的帮助 只需使用form.save(commit=False),然后进行必要的更改
def post(self,request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
user = User.objects.get(username__exact=self.request.user)
instance = form.save(commit=False)
instance.user = user
instance.save()
什么是copy.copy()?它显示NameError:name“copy”未定义。请先导入副本。这是一个复制结构的模块。我认为这是必要的,因为
request.POST
是不可变的。