Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 4, 2015 23:40:21

frostspb
Зарегистрирован: 2013-04-24
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

связать пользователя и модель

Доброго времени суток. Такой вопрос: допустим у меня есть модель книги. Как мне сделать так, чтобы при добавлении пользователем новой книги , фиксировалось какой пользователь её внес?
Добавить в модель Книги такое вот поле? user_id = models.ForeignKey(User) я пробовал , но ничего хорошего из этого не вышло

Офлайн

#2 Янв. 5, 2015 03:59:15

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

связать пользователя и модель

А что вышло плохого? Так и надо делать.
Разве что по возможности не называйте ForeignKey поля xxx_id, т.к. в БД django автоматически добавит к полю этот суффикс и у вас получится user_id_id

Отредактировано GreyZmeem (Янв. 5, 2015 03:59:32)

Офлайн

#3 Янв. 6, 2015 18:38:35

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

связать пользователя и модель

frostspb
Как мне сделать так, чтобы при добавлении пользователем новой книги

В чем проблема?
заполняйте это поле теперь при добавлении новой записи.

Офлайн

#4 Янв. 9, 2015 17:28:28

frostspb
Зарегистрирован: 2013-04-24
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

связать пользователя и модель

ну да, связать получилось, но теперь я немного не догоняю, как вытащить имя пользователя в моем кверисете?

есть модель

class Orders(models.Model):
    name = models.CharField(max_length=64, verbose_name= 'ИМЯ')
    desc = models.CharField(max_length=64)
    user = models.ForeignKey(User)

есть сетка jqgrid
fields =

как туда подставить имя пользователя?

я использую библиотеку django-jqgrid, сама сетка там описывается так

class OrdersGrid(JqGrid):
        model =Orders # could also be a queryset
        fields = ['id', 'name', 'desc', 'user'] # optional
        url = reverse_lazy('Ordis_Web:order_grid_handler')
        pager_id = '#order_pager'
        caption = 'Orders Grid' # optional
        colmodel_overrides = {
            'id': {'editable': False, 'width': 10},
            'name': {'editable': True, 'width': 15},
            'desc': {'editable': True, 'width': 30},
            'user': {'editable': False, 'width': 20},
        }

соответственно, туда я должен подставить модель или кверисет, могу я как то сделать так, чтобы кверисет возвращал все поля модели плюс имя пользователя?

Отредактировано frostspb (Янв. 9, 2015 17:38:17)

Офлайн

#5 Янв. 10, 2015 00:59:03

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

связать пользователя и модель

Попробуйте

fields = ['id', 'name', 'desc', 'user__username']

Офлайн

#6 Янв. 10, 2015 14:10:42

frostspb
Зарегистрирован: 2013-04-24
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

связать пользователя и модель

GreyZmeem
Попробуйте
Не прокатило, не может отсериализовать, тк такого поля нет

Офлайн

#7 Янв. 10, 2015 15:26:36

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

связать пользователя и модель

Покажите полностью traceback ошибки.

Офлайн

#8 Янв. 10, 2015 21:48:18

frostspb
Зарегистрирован: 2013-04-24
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

связать пользователя и модель

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/ordersgrid/cfg/

Django Version: 1.7.2
Python Version: 2.7.8
Installed Applications:
('django.contrib.admin',
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘Ordis_Web’)
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
‘django.middleware.common.CommonMiddleware’,
‘django.middleware.csrf.CsrfViewMiddleware’,
‘django.contrib.auth.middleware.AuthenticationMiddleware’,
‘django.contrib.auth.middleware.SessionAuthenticationMiddleware’,
‘django.contrib.messages.middleware.MessageMiddleware’,
‘django.middleware.clickjacking.XFrameOptionsMiddleware’)


Traceback:
File “C:\Python27\lib\site-packages\django\core\handlers\base.py” in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File “F:\MyWork\Ordis2\Ordis_Web\views.py” in order_grid_config
78. z = grid.get_config(urledit=str(cc))
File “C:\Python27\jqgrid.py” in get_config
245. ‘colModel’: self.get_colmodels(),
File “C:\Python27\jqgrid.py” in get_colmodels
270. (field, model, direct, m2m) = self.lookup_foreign_key_field(opts, field_name)
File “C:\Python27\jqgrid.py” in lookup_foreign_key_field
264. return options.get_field_by_name(field_name)
File “C:\Python27\lib\site-packages\django\db\models\options.py” in get_field_by_name
420. % (self.object_name, name))

Exception Type: FieldDoesNotExist at /ordersgrid/cfg/
Exception Value: Orders has no field named ‘user_username’

Офлайн

#9 Янв. 10, 2015 22:00:52

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

связать пользователя и модель

Я вам написал user__username, а вы, судя по трейсбэку, указали user_username.

Офлайн

#10 Янв. 10, 2015 22:04:42

frostspb
Зарегистрирован: 2013-04-24
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

связать пользователя и модель

а, это я уже эсперементировал, вот результат с 2мя _
как раз и пишет , что не сереализуется


Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/ordersgrid/cfg/

Django Version: 1.7.2
Python Version: 2.7.8
Installed Applications:
('django.contrib.admin',
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘Ordis_Web’)
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
‘django.middleware.common.CommonMiddleware’,
‘django.middleware.csrf.CsrfViewMiddleware’,
‘django.contrib.auth.middleware.AuthenticationMiddleware’,
‘django.contrib.auth.middleware.SessionAuthenticationMiddleware’,
‘django.contrib.messages.middleware.MessageMiddleware’,
‘django.middleware.clickjacking.XFrameOptionsMiddleware’)


Traceback:
File “C:\Python27\lib\site-packages\django\core\handlers\base.py” in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File “F:\MyWork\Ordis2\Ordis_Web\views.py” in order_grid_config
79. return JsonResponse(z, safe=False)
File “C:\Python27\lib\site-packages\django\http\response.py” in __init__
479. data = json.dumps(data, cls=encoder)
File “C:\Python27\lib\json\__init__.py” in dumps
250. sort_keys=sort_keys, **kw).encode(obj)
File “C:\Python27\lib\json\encoder.py” in encode
207. chunks = self.iterencode(o, _one_shot=True)
File “C:\Python27\lib\json\encoder.py” in iterencode
270. return _iterencode(o, 0)
File “C:\Python27\lib\site-packages\django\core\serializers\json.py” in default
109. return super(DjangoJSONEncoder, self).default(o)
File “C:\Python27\lib\json\encoder.py” in default
184. raise TypeError(repr(o) + “ is not JSON serializable”)

Exception Type: TypeError at /ordersgrid/cfg/
Exception Value: <django.utils.functional.__proxy__ object at 0x031B8B70> is not JSON serializable

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version