Использование Django auth User model как Foreignkey и обратных отношений - PullRequest
12 голосов
/ 28 марта 2011

Я использую модель User от django.contrib.auth.models. У меня есть другая модель под названием Post, которая ссылается на User через внешний ключ.

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

request.user.post_set.order_by('-timestamp')

Я получаю ошибку, User объект не имеет атрибута post_set. Так как же использовать модель аутентификации по умолчанию с внешними ключами?

Ответы [ 3 ]

17 голосов
/ 28 марта 2011

Включили ли вы приложение, содержащее модель Post, в установленные приложения settings.py?

например,

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'testapp'
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

и запустили manage.py syncdb?

python manage.py syncdb

то есть таблица базы данных для модели Post определенно существует?

Я провел быстрый тест и не нашел проблем:

from django.db import models
from django.contrib.auth.models import User

class PostModel(models.Model):
    user = models.ForeignKey(User)

(test) C:\Users\Steven\django_projects\test\testproj>python manage.py shell
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.contrib.auth.models import User
>>> test = User.objects.get(username='test')
>>> test.postmodel_set.all()
[]
7 голосов
/ 28 марта 2011
Post.objects.filter(user=request.user).order_by('-timestamp')
0 голосов
/ 31 октября 2015

это может быть вызвано тем, что вы определили параметр related_name в ForeignKey (или OneToOneField), если это так:

user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,related_name='post')
genre = models.CharField(max_length=100)

Вы должны использовать его, как показано ниже:

print(user.post.genre)

Или:

print(post.user.email)

Обратите внимание: если я смогу увидеть ваши models.py и settings.py, это будет лучший ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...