Ошибка Django с ORM - PullRequest
       6

Ошибка Django с ORM

0 голосов
/ 26 октября 2011

Я начал изучать django и у меня возникла проблема с INSERT-запросом с использованием 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'

Следующий код является дескриптором пост-запроса в 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)\Python\lib\site-packages\django\db\models\base.py in __init__, line 364
Python Executable:  C:\Program Files (x86)\Python\python.exe
Python Version: 2.7.2
Python Path:    
['D:\\Projects\\passkeeper',
 'D:\\\xcf\xf0\xee\xe3\xf0\xe0\xec\xec\xfb\\\xcf\xf0\xee\xe3\xf0\xe0\xec\xec\xe8\xf0\xee\xe2\xe0\xed\xe8\xe5\\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',
)

Ответы [ 2 ]

6 голосов
/ 26 октября 2011

Я думаю, эти запятые в определении вашей модели.

Вы устанавливаете 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 голос
/ 26 октября 2011

Завершающие запятые в определении класса модели создают проблемы, удаление которых должно решить вашу проблему.

Завершающая запятая (,) создает кортеж с одним элементом.

a = 1,

эквивалентно

a = (1, )

, который является кортежем одного элемента.Что происходит в вашем случае, так это то, что Django не распознает ваши поля как поля модели, поскольку ваши поля «обернуты» в кортеж.

Дополнительную информацию смотрите в документации по кортежам Python: http://docs.python.org/tutorial/datastructures.html#tuples-and-sequences

...