我试图将登录的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})
PostForm:
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
感谢您的每一个答案!
答案 0 :(得分:0)
首先,您必须为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})
P.S。我不清楚您的UserProfile
和User
是如何相关的。我想这是OneToOneField
,那么您可以按post.user.userprofile
我希望你解决得好!