мое django представление всегда выдает "неожиданную ошибку аргумента ключевого слова - PullRequest
2 голосов
/ 06 мая 2020

Я знаком с python и начал изучать django, и это весело вначале, как когда-либо вставка таблицы становится для меня кошмаром через 2 дня и всегда выдает следующую ошибку * Я пробовал все возможные способы для документации и stackoverflow, но ничего не работает. но у меня сработало другое представление с таким же синтаксисом, что так странно. вот мои файлы. это моя трассировка стека.

Traceback (most recent call last):
  File "C:\Users\manee\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\manee\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\manee\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\manee\myapp\PE\views.py", line 77, in sample
    a=sample(firstname=name)

Exception Type: TypeError at /sample
Exception Value: sample() got an unexpected keyword argument 'firstname'

это комбинация рабочего вида и тревожного вида (проблемы работают нормально, образец не работает).

def problems(request):

    name=request.POST['name']
    title=request.POST['title']
    difficulty=request.POST['example']
    description=request.POST['description']
    solution=request.POST['solution']
    code=request.POST['code']

    question=problem(name=name,title=title,difficulty=difficulty,description=description,solution=solution,code=code)
    question.save()
    return render(request,'thanks.html')


def sample(request):
    name=request.POST['name']
    email=request.POST['email']
    rno=request.POST['rno']
    a=sample(firstname=name,email=email,rno=rno)
    a.save()
    return render(request,'example.html',{'name':name})

и вот my models.py

from django.db import models

#Create your models here.
class problem(models.Model):
    id=models.AutoField(primary_key=True)
    name=models.CharField(max_length=20)
    title=models.CharField(max_length=30)
    difficulty=models.CharField(max_length=10)
    description=models.TextField()
    solution=models.TextField()
    code=models.TextField()
    def __str__(self):
        return self.name

class sample(models.Model):
    firstname=models.CharField(max_length=20)
    email=models.EmailField()
    rno=models.IntegerField(primary_key=True)

    def __str__(self):
        return self.firstname

пожалуйста исправьте быстро

1 Ответ

3 голосов
/ 06 мая 2020

В вашей модели sample нет поля name, только firstname, но проблема здесь , а не . Проблема в том, что ваши представления имеют то же имя , поэтому, если вы вызовете sample(..), он вызовет функцию view .

Обычно модели начинаются с U ppercase, хотя и не обязателен, он упрощает различие между названиями моделей и представлений . Таким образом, вы можете определить модели как:

from django.db import models

#Create your models here.
class <b>Problem</b>(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=20)
    title = models.CharField(max_length=30)
    difficulty = models.CharField(max_length=10)
    description = models.TextField()
    solution = models.TextField()
    code = models.TextField()

    def __str__(self):
        return self.name

class <b>Sample</b>(models.Model):
    firstname = models.CharField(max_length=20)
    email = models.EmailField()
    rno = models.IntegerField(primary_key=True)

    def __str__(self):
        return self.firstname

В представлениях вы можете затем использовать модель с:

from .models import Problem, Sample

def problems(request):
    name=request.POST['name']
    title=request.POST['title']
    difficulty=request.POST['example']
    description=request.POST['description']
    solution=request.POST['solution']
    code=request.POST['code']
    question = <b>Problem</b>.objects.create(
        name=name,
        title=title,
        difficulty=difficulty,
        description=description,
        solution=solution,
        code=code
    )
    return render(request,'thanks.html')


def sample(request):
    name=request.POST['name']
    email=request.POST['email']
    rno=request.POST['rno']
    a = <b>Sample</b>.objects.create(<b>firstname=name</b>,email=email,rno=rno)
    return render(request,'example.html',{'name':name})

При этом, как правило, лучше использовать ModelForm [Django -doc] (или, по крайней мере, Form для обработки ввода), это делает его менее подверженным ошибкам и более удобным для обработки данных.

Примечание : в случае успешного запроса POST вы должны сделать redirect [Django -doc] для реализации шаблона Post / Redirect / Get [wiki] . Это позволяет избежать того, чтобы вы выполняли тот же запрос POST, когда пользователь обновляет браузер.

...