Как сохранить информацию о пользователе, который формирует форму? - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь указать в форме пол 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",)

Вот модель сообщения:

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

Спасибо за каждый ответ!

1 Ответ

0 голосов
/ 31 мая 2018

Сначала вы должны добавить дополнительные поля для 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

Надеюсь, вы решите это хорошо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...