2016-12-08 9 views
-1

私はモデルプロジェクトを持つプロジェクトと呼ばれるアプリケーションを持っています。だから、私は/ map.htmlテンプレートのプロジェクトからのデータにアクセスすることができます。Djangoは別のアプリケーションで定義されたモデルを参照しています - >空のQuerySet

Django Docsによると、

別のアプリケーションで定義されたモデルを参照するには、完全なアプリケーションラベルでモデルを明示的に指定できます。メーカーモデルは、上記の他のアプリケーションと呼ばれる生産に定義されている場合たとえば、あなたが使用する必要があるだろう:projects.models.pyから

class Car(models.Model): 
    manufacturer = models.ForeignKey(
     'production.Manufacturer', 
     on_delete=models.CASCADE, 
    ) 

class Project(models.Model): 
    title = models.CharField(max_length=200) 
    text = models.TextField() 
    date = models.DateField() 
    featured_image = models.ImageField(
     upload_to='projects/featured', blank=True) 
    lon = models.DecimalField(max_digits=10, decimal_places=8, default=1) 
    lat = models.DecimalField(max_digits=10, decimal_places=8, default=1) 
    location = models.CharField(max_length=200, blank=True) 

からmap.models.py:

from django.db import models 

from projects.models import Project 

class MapData(models.Model): 
    map_data = models.ForeignKey(Project) 

しかし、シェルにアクセスすると、空のクエリセットを取得:私のmap.models.pyファイルに関しては

>>> from map.models import MapData 
>>> MapData.objects.all() 
<QuerySet []> 

を、私は私に同じ結果を与えるOneToOneField(Project)を試してみました。そして私はmap_data = models.ForeignKey(projects.Project)にNameErrorを与えて、map_data = models.ForeignKey('projects.Project')を引用符で囲み、空のQuerySetを与えようとしました。

誰かが私がここで理解していないことを説明できますか?私が望むのは、map.htmlのテンプレートにproject.latproject.lonproject.titleおよびproject.featured_imageにアクセスできることだけです。

+0

以前にいくつかのMapDataインスタンスを保存しましたか? – ettanany

+0

いいえ、私はそうは思わない。あるいは私はいくつかの移行を行った。 – itchangry

+0

'MapData.objects.all()'を実行するとどのように結果が得られると思いますか? – ettanany

答えて

2

MapDataインスタンスを以前に保存しなかった場合、これは予想される結果です。

>>> from map.models import MapData 
>>> from projects.models import Project 
>>> 
>>> p1 = Project() 
>>> p1.title = 'First Project' 
>>> p1.save() # We save this project in the database! 
>>> 
>>> md1 = MapData() 
>>> md1.map_data = p1 # We use the above project for this md1 
>>> md1.save() # We save md1 
>>> 
>>> MapData.objects.all() # You should get the one that we just created 
+0

最初に答えたとき、私は誤解しているかもしれません。私は2つのプロジェクトのインスタンスを保存しています。 >>> Project.objects.all()は2つのインスタンスを返します。 >>> md1.map_data = Project.objects.get(pk = 1)は、]> を返します。 – itchangry

+0

MapData.objects.all()を実行するとMapData instacesを作成する必要があります – ettanany

+0

MapDataインスタンスを作成しなくても、Projectからこれらのデータを取得できます。 – itchangry

関連する問題