Форум сайта python.su
Доброго времени суток. Такой вопрос: допустим у меня есть модель книги. Как мне сделать так, чтобы при добавлении пользователем новой книги , фиксировалось какой пользователь её внес?
Добавить в модель Книги такое вот поле? user_id = models.ForeignKey(User) я пробовал , но ничего хорошего из этого не вышло
Офлайн
А что вышло плохого? Так и надо делать.
Разве что по возможности не называйте ForeignKey поля xxx_id, т.к. в БД django автоматически добавит к полю этот суффикс и у вас получится user_id_id
Отредактировано GreyZmeem (Янв. 5, 2015 03:59:32)
Офлайн
frostspb
Как мне сделать так, чтобы при добавлении пользователем новой книги
Офлайн
ну да, связать получилось, но теперь я немного не догоняю, как вытащить имя пользователя в моем кверисете?
есть модель
class Orders(models.Model): name = models.CharField(max_length=64, verbose_name= 'ИМЯ') desc = models.CharField(max_length=64) user = models.ForeignKey(User)
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)
Офлайн
Попробуйте
fields = ['id', 'name', 'desc', 'user__username']
Офлайн
GreyZmeemНе прокатило, не может отсериализовать, тк такого поля нет
Попробуйте
Офлайн
Покажите полностью traceback ошибки.
Офлайн
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’
Офлайн
Я вам написал user__username, а вы, судя по трейсбэку, указали user_username.
Офлайн
а, это я уже эсперементировал, вот результат с 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
Офлайн