Почему ввод данных django не сохраняется в базе данных? - PullRequest
0 голосов
/ 06 мая 2019

Я создал форму, которая будет принимать и сохранять входные значения в базе данных (mysql). Мои forms.py

class postcreation(forms.Form):
    post_title = forms.CharField(max_length=200, widget=forms.TextInput(attrs={'name':'post_title'}))
    post_name = forms.CharField(max_length=200, widget=forms.TextInput(attrs={'name':'post_name'}))
    post_post = forms.CharField(widget=forms.Textarea(attrs={'name':'post_post'}))

My models.py

class postdata(models.Model):

    title = models.CharField(max_length=200)
    name = models.ForeignKey(userdata, on_delete='CASECADE')
    post = models.TextField()

    def __str__(self):
        return self.title

Сначала я не использовал значение attr. Это не сработало. Я видел ответ stackoverflow, который говорит, что я должен Все еще не повезло.

Мои views.py

def postinput(request):

    if request.method == 'POST':
        form = postcreation(request.POST)
        if form.is_valid():
            inputpost = postdata(title=request.POST['post_title'], name=request.POST['post_name'], post=request.POST['post_post'])
            inputpost.save()
            return redirect('index')
    else:
        form = postcreation()

    context = { 'form': form }
    return render(request, 'firstapp/postinput.html', context)

HTML-шаблон

<form method="POST" action="{% url 'index' %}">
    {% csrf_token %}
    {{ form }}
    <button type="submit">Post</button>
</form>

Я пытался получить ввод через форму и сохранить его в базе данных. Но я не мог этого сделать. Я не могу понять почему. Я просматривал некоторые учебные пособия и некоторые вопросы, связанные с переполнением стека. Это все еще не работает. Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 мая 2019

Вы можете получить значения из проверенной формы вместо запроса напрямую, например:

    # . . .
    if form.is_valid()
        inputpost = postdata(title=form.cleaned_data.get('title'), 
                             name=form.cleaned_data.get('name'), 
                             post=form.cleaned_data.get('post'))
    # . . .

Поскольку postdata.name является объектом пользовательских данных, вам необходимо указать его на один.Например, делая что-то вроде этого

    if form.is_valid()
        inputpost = postdata(title=form.cleaned_data.get('title'),
                             post=form.cleaned_data.get('post'))

        name=form.cleaned_data.get('name')
        inputpost.name = userdata.objects.get(name=name) # or something similar, 
                                                         # depending on what exactly 
                                                         #`userdata` is and how 
                                                         # to get the relevant instance.
        inputpost.save()

Я точно не знаю, как получить сообщение userdata, поскольку это зависит от остальной части вашего кода, но это что-то вроде этого.

Возможно, вы захотите создать новый объект userdata.Это было бы что-то вроде:

        # . . . 
        name=form.cleaned_data.get('name')
        ud = userdata(name=name)
        ud.save()
        inputpost.name = ud, 
        inputpost.save()
        # . . . 

Опять же, зависит от того, что userdata.

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