django - django - 如何保存表单的用户信息?
问题描述
我正在尝试将登录的 UserProfile 的性别放入表格中。
这是 UserProfile 的类:
class UserProfile(models.Model):
FEMALE = 'FEMALE'
MALE = 'MALE'
SEX = (
(MALE, 'Male'),
(FEMALE, 'Female'),
)
birth_date = models.DateField()
sex = models.CharField(max_length=5, choices=SEX, default=MALE)
def __str__(self):
return self.user.username
这是视图:
@login_required
def add_post(request):
form = PostForm()
# A HTTP POST?
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
profile.save()
return index(request)
else:
print(form.errors)
return render(request, 'rango/add_post.html', {'form': form})
邮寄表格:
class PostForm(forms.ModelForm):
discord = forms.CharField(max_length=500, help_text="Please enter the title of the post.")
post = forms.CharField(max_length=500, help_text="Please enter the post.")
telegram = forms.CharField(max_length=128, help_text="Please enter your telegram id.")
class Meta:
model = Post
exclude = ("user",)
这是 Post 模型:
class Post(models.Model):
user = models.ForeignKey(to=User, on_delete=models.CASCADE)
discord = models.CharField(max_length= 500)
post = models.CharField(max_length= 500)
telegram = models.CharField(max_length=128)
def __str__(self): # For Python 2, use __unicode__ too
return self.post
感谢您的每一个回答!
解决方案
首先,您必须为PostForm
.
class PostForm(forms.ModelForm):
# add extra fields for sex
sex = forms.CharField(...)
discord = forms.CharField(max_length=500, help_text="Please enter the title of the post.")
post = forms.CharField(max_length=500, help_text="Please enter the post.")
telegram = forms.CharField(max_length=128, help_text="Please enter your telegram id.")
class Meta:
model = Post
exclude = ("user",)
然后将其保存在视图中。
@login_required
def add_post(request):
form = PostForm()
# A HTTP POST?
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
# it will be post
post = form.save(commit=False)
sex = form.cleaned_data.get('sex')
post.user = request.user
post.save()
# this is real profile from UserProfile model
profile = post.user.userprofile
profile.sex = sex
profile.save()
return index(request)
else:
print(form.errors)
return render(request, 'rango/add_post.html', {'form': form})
ps我不清楚你UserProfile
和你的User
关系如何。我想是的OneToOneField
,那么你可以通过post.user.userprofile
希望你好好解决!
推荐阅读
- c - 我无法使用 fscanf 将文件中的数据加载到结构中
- amazon-web-services - AWS Media Live - 处理流开始和停止事件
- python - 了解 Pytorch 过滤器功能
- html2pdf - 如何在 html2pdf.js 上添加页脚
- r - 有没有办法根据它们在该组中的顺序索引分组项目的编号?
- angular - 使用打字稿定义模拟 Google Maps 对象
- reactjs - 在 onCompleted 后切换页面用下一个 js 反应阿波罗
- node.js - 为什么postman测试转换为k6脚本后无法通过
- asp.net-core - 未调用 IClaimsTransformation
- python - 我正在编写一个函数,它将使用递归在嵌套列表中返回一组唯一元素