Найти - Пользователи
Полная версия: связать пользователя и модель
Начало » Django » связать пользователя и модель
1 2 3
frostspb
Доброго времени суток. Такой вопрос: допустим у меня есть модель книги. Как мне сделать так, чтобы при добавлении пользователем новой книги , фиксировалось какой пользователь её внес?
Добавить в модель Книги такое вот поле? user_id = models.ForeignKey(User) я пробовал , но ничего хорошего из этого не вышло
GreyZmeem
А что вышло плохого? Так и надо делать.
Разве что по возможности не называйте ForeignKey поля xxx_id, т.к. в БД django автоматически добавит к полю этот суффикс и у вас получится user_id_id
inoks
frostspb
Как мне сделать так, чтобы при добавлении пользователем новой книги

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

есть модель

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},
        }

соответственно, туда я должен подставить модель или кверисет, могу я как то сделать так, чтобы кверисет возвращал все поля модели плюс имя пользователя?
GreyZmeem
Попробуйте
fields = ['id', 'name', 'desc', 'user__username']
frostspb
GreyZmeem
Попробуйте
Не прокатило, не может отсериализовать, тк такого поля нет
GreyZmeem
Покажите полностью traceback ошибки.
frostspb
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’
GreyZmeem
Я вам написал user__username, а вы, судя по трейсбэку, указали user_username.
frostspb
а, это я уже эсперементировал, вот результат с 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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB