#python #django #django-models
#python #django #django-модели
Вопрос:
Я начал изучать django и у меня возникла проблема с запросом ВСТАВКИ с использованием ORM (DB mysql). Моя модель:
class Record(models.Model):
id = models.AutoField(primary_key=True, blank=True),
schema_id = models.IntegerField(),
name = models.CharField(max_length=50),
desc = models.TextField(blank=True)
class Meta:
db_table = 'keeper_record'
Следующий код обрабатывает запрос post в view.py:
def add_record(request):
if request.method == 'POST':
Record.objects.create(
schema_id = request.POST.get('schema_id', 1),
name = request.POST.get('name', 'd'),
desc = request.POST.get('desc', ' ')
)
record.save()
return HttpResponse('')
Но этот код вызывает ошибку:
Request Method: POST
Request URL: http://127.0.0.1:8000/records/add/
Django Version: 1.3.1
Exception Type: TypeError
Exception Value:
'schema_id' is an invalid keyword argument for this function
Exception Location: C:Program Files (x86)Pythonlibsite-packagesdjangodbmodelsbase.py in __init__, line 364
Python Executable: C:Program Files (x86)Pythonpython.exe
Python Version: 2.7.2
Python Path:
['D:\Projects\passkeeper',
'D:\xcfxf0xeexe3xf0xe0xecxecxfb\xcfxf0xeexe3xf0xe0xecxecxe8xf0xeexe2xe0xedxe8xe5\PyCharm\helpers',
'D:\Projects\passkeeper',
'D:\Projects',
'C:\Windows\system32\python27.zip',
'C:\Program Files (x86)\Python\DLLs',
'C:\Program Files (x86)\Python\lib',
'C:\Program Files (x86)\Python\lib\plat-win',
'C:\Program Files (x86)\Python\lib\lib-tk',
'C:\Program Files (x86)\Python',
'C:\Program Files (x86)\Python\lib\site-packages']
Я устанавливаю драйвер mysql для python и имею стандартные настройки для проекта, но был удален только csrf
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
Ответ №1:
Я предполагаю, что эти запятые в определении вашей модели.
Вы устанавливаете schema_id
кортеж поля модели. id = (models.AutoField(...),)
Удалите конечную запятую, и все должно быть готово.
class Record(models.Model):
id = models.AutoField(primary_key=True, blank=True), # remove ,
schema_id = models.IntegerField(), # remove ,
name = models.CharField(max_length=50), # remove ,
desc = models.TextField(blank=True)
class Meta:
db_table = 'keeper_record'
Комментарии:
1. Спасибо, это действительно ошибка новичка 🙂
Ответ №2:
Конечные запятые в определении класса вашей модели создают проблемы, их удаление должно решить вашу проблему.
Завершающая запятая (,) создает кортеж с одним элементом.
a = 1,
эквивалентно
a = (1, )
Который представляет собой кортеж из одного элемента. В вашем случае происходит то, что ваши поля не распознаются Django как поля модели, поскольку ваши поля «завернуты» в кортеж.
Дополнительную информацию см. в документации Python по кортежам: http://docs.python.org/tutorial/datastructures.html#tuples-and-sequences