首页 > 解决方案 > 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

感谢您的每一个回答!

标签: djangodjango-modelsdjango-forms

解决方案


首先,您必须为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

希望你好好解决!


推荐阅读