2011-03-28 10 views
12

मैं django.contrib.auth.models से User मॉडल का उपयोग कर रहा हूं। मेरे पास Post नामक एक और मॉडल है जो एक विदेशी कुंजी के माध्यम से User संदर्भित करता है।Django auth उपयोगकर्ता मॉडल का उपयोग विदेशी और रिवर्स रिलेशनशिप के रूप में

समस्या है जब मैं के माध्यम से

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

मैं एक त्रुटि, User वस्तु कोई विशेषता post_set है पाने के लिए एक उपयोगकर्ता के पदों में लॉग इन तक पहुँचने का प्रयास। तो मैं विदेशी कुंजी के साथ डिफ़ॉल्ट ऑथ मॉडल का उपयोग कैसे करूं?

+0

अपना पोस्ट मॉडल दिखाएं। –

+0

जब तक कि आपके पास कुछ मामूली त्रुटि न हो, मैंने एक बार देखा कि उपयोगकर्ता मॉडल के कुछ विशिष्ट "बंदर पैच" वापस संदर्भों के कारण नहीं आते हैं। –

उत्तर

7
Post.objects.filter(user=request.user).order_by('-timestamp') 
+2

अच्छा कामकाज, लेकिन उन बैक्रेरेंस होना चाहिए, है ना? –

17

क्या आपने अपने सेटिंग्स.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 

i.e क्या पोस्ट मॉडल के लिए डेटाबेस तालिका निश्चित रूप से मौजूद है?

मैं एक त्वरित परीक्षण किया था और कोई समस्या नहीं मिला:

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() 
[] 
0

यह कारण हो सकता है आप ForeignKey (या OneToOneField) में related_name विकल्प परिभाषित द्वारा, अगर यह इस तरह है:

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 देख सकता हूं तो यह बेहतर उत्तर होगा।

संबंधित मुद्दे