get () принимает от 2 до 3 позиционных аргументов, но было дано 4. Почему происходит эта ошибка? Какое решение для этого? - PullRequest
2 голосов
/ 13 октября 2019

Я работал над комментарием к проекту блога. Когда я набрал код для обработки запроса POST в views.py, но получал ошибку. Это была ошибка «get () принимает от 2 до 3 позиционных аргументов, но было дано 4».

models.py

class commenttable(models.Model):
    comment_id = models.AutoField(primary_key=True, default=0)
    blog = models.TextField()
    comment_name = models.CharField(max_length=200)
    comment_email = models.EmailField()
    comment_Text = models.TextField()
    comment_date = models.DateField()

    def __str__(self):
        return self.comment_Text

views.py

from .models import commenttable

...

def post_comment(request, blog_id):
    if request.method == 'POST':
        data = request.POST.get("name", "email", "comment")
       # blog = get_object_or_404(Blog_tables, pk=blog_id)
        p = commenttable(blog= data.name, comment_name=data.email, comment_email= data.email, comment_Text= data.comment, comment_data = timezone.now())
        p.save()
        return HttpResponseRedirect('/thanks/')
    else:
        return render(request, '/blogs/' + blog_id + '/comment', {'error_message': 'Error'})


Это форма:

<form action="/blogs/{{blog_id}}/comment" method ="post">
            {% csrf_token %}

            <input type="text" name="name" id="name" placeholder="Enter Your Name"/>
            <input type="text" name="email" id="email" placeholder="Enter Your Email"/>
            <input type="text" name="comments" id="comments" placeholder="Comments here"/>

            <input type="submit" value="Post"/>
        </form>

Я хочу получить данные из запроса POST и сохранить их в базе данных. Но написание этого кода дает мне ошибку: «get () принимает от 2 до 3 позиционных аргументов, но было дано 4».

1 Ответ

2 голосов
/ 13 октября 2019

Вы не можете получить несколько элементов с помощью:

data = request.POST.<s>get('name', 'email', 'comment')</s>

Метод QueryDict.get(..) [Django-doc] принимает один или два явных параметры. Первое значение - это key , а второе - необязательное по умолчанию (если вы его не предоставите, будет использоваться None).

YouТаким образом можно получить данные с:

name = request.POST.<b>get('name')</b>
email = request.POST.<b>get('email')</b>
comment = request.POST.<b>get('comment')</b>
blog = get_object_or_404(Blog_tables, pk=blog_id)
p = commenttable.objects.create(
    blog=blog,
    comment_name=name,
    comment_email=email,
    comment_Text=comment,
    comment_data=timezone.now()
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...