2011-03-28 10 views
12

User modelini django.contrib.auth.models numaralı telefondan kullanıyorum. Yabancı bir anahtarla User referansı verilen Post isimli başka bir modelim var. Ben bir hata, User nesne hiçbir özelliği post_set sahiptir olsunDjango auth Kullanıcı modelini bir Foreignkey ve ters ilişki olarak kullanma

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

içinden Bir kullanıcının tüm yayınları oturum erişmeye çalıştığınızda

sorun

olduğunu. Öyleyse, varsayılan auth modelini yabancı anahtarlarla nasıl kullanırım?

+0

Gönderi modelinizi gösterin. –

+0

Orada bazı önemsiz hatalarınız olmadıkça, bir keresinde Kullanıcı modelinin bazı "maymun yamaları" nın oluşturulmayan referanslara yol açtığını fark ettim. –

cevap

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

İyi bir çözüm, ancak bu geri dönüşler orada olmalı, değil mi? –

17

Ayarlar modelini içeren uygulamayı settings.py yüklü uygulamalarınıza dahil ettiniz mi?

örn.

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', 
) 

ve run.py syncdb?

Post modelinin veritabanı tablosu kesinlikle var mı? Şu şekilde eğer ForeignKey (ya OneToOneField) 'de related_name seçeneği tanımlandığı tarafından o kaynaklanıyor olabilir

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

,:

ben hiç problem hızlı bir test yaptım ve buldum

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

sen aşağıdaki gibi kullanmalı?

print(user.post.genre) 

Veya:

print(post.user.email) 

Uyarı: models.py ve settings.py öğelerinizi görebiliyorsam daha iyi bir yanıt olur.

İlgili konular