0

以下に示すように、webapp に 2 つの Django クラス、Image と Tag (書式設定を許してください) があります。

class Image(models.Model):
image_path = models.CharField(max_length=200)
image_name = models.CharField(max_length=200)
x = models.IntegerField(default=0)
y = models.IntegerField(default=0)
num_tags = models.IntegerField(default=0)   
image_score = models.FloatField()
def __unicode__(self):
    return u'%d' % self.id 

class Meta:
    unique_together = ("image_path", "image_name")  

class Tag(models.Model):

    TEXT_BRIGHTNESS_CHOICES = (
    ('bright', 'bright'),
    ('dark', 'dark'),
    )

image = models.ForeignKey(Image)
tag_text = models.CharField(max_length=200)
x = models.IntegerField(default=0)
y = models.IntegerField(default=0)
width = models.IntegerField(default=0)
height = models.IntegerField(default=0)
textbrightness = models.CharField(max_length=10, choices=TEXT_BRIGHTNESS_CHOICES, default='dark')
text_alignment = models.CharField(max_length=16, default="horizontal")


def __unicode__(self):
    return self.tag_text

Image.objects.all() の行に沿って、すべての Image オブジェクトのクエリを返したいのですが、クエリセットでは、Tag.image = Image.id であるすべての Tag オブジェクトも取得できますか? 申し訳ありませんが、これはSQLでは本当に簡単だと確信していますが、ここでそれを行う方法がわかりません...

編集:返信ありがとうございますが、クエリセットに画像情報とそれに関連付けられたすべてのタグの両方が含まれるようにする方法はありますか? すべての情報を含む XML 形式を生成しようとしています。例:

<image image_path="downloaded_images/1_music_working/">
    <imageName>51rtpUU4meL.jpg</imageName>
    <resolution x="393" y="500" />
    <taggedRectangles>
        #each tag associated with the photo will go here
    </taggedRectangles>
</image>                  

Django テンプレートを使用して情報を入力しています。テンプレートは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<tagset>
{% for object in query_set %}
    <image image_path="{{object.image_path}}">
    <imageName>{{object.image_name}}</imageName>
    <resolution x="{{object.x}}" y="{{object.y}}" />
    <taggedRectangles>
    </taggedRectangles>
    </image>    
{% endfor %}
</tagset>
4

4 に答える 4

1

反対側のモデル名とそれに続く「_set」でフィールドをボール化することにより、ForeignKey 関係を「後方」にたどることができます。

image = Image.objects.get(id=1)
tags = image.tag_set.all()
于 2012-07-23T09:07:16.447 に答える
1

逆リレーションを使用

tags = image.tag_set.all()
于 2012-07-23T09:07:47.157 に答える
0

私があなたの質問を正しく理解していれば、あなたはできるでしょう tags = image.tag.all()

于 2012-07-23T09:17:50.790 に答える
0

何らかの理由で、QuerySet が反復可能であるとは思いもしませんでした...そのため、次のようにしました。

for image in Image.objects.all():
        image_data = serialize_image(image)
        myfile.write(image_data)
        all_tags = image.tag_set.all()
        tag_data = serialize_tag(all_tags)
        myfile.write(tag_data)

まだ Python / Django を学ぼうとしていますが、実際に使って 4 週間目です (学校での 3 週間を除けば)。これは本当に素晴らしい言語であり、比較すると Java/C コードが肥大化したように見えます :)

于 2012-07-24T02:00:24.043 に答える