1

Python と Django は初めてです。私を悩ませている基本的な python/django ORM の質問があります。2 つのモデルがあり、繰り返される show_image 関数があります。それは良くないね。

class Dinner(models.Model):

    title = models.CharField(max_length=200)
    is_approved = models.BooleanField()
    hero = models.ImageField(upload_to="heros", blank=True)

    def show_image(self):
        image_url = None
        if self.hero is not None:
            image_url = """<img src="{0}{1}" />""".format(BASE_URL, self.hero)
        return image_url

    show_image.short_description = "Thumbnail"
    show_image.allow_tags = True

class Speaker(models.Model):

    title = models.CharField(max_length=200)
    biography = models.TextField(blank=True)
    headshot = models.ImageField(upload_to="headshots", blank=True)

    def show_image(self):
        image_url = None
        if self.headshot is not None:
            image_url = """<img src="{0}{1}" />""".format(BASE_URL, self.headshot)
        return image_url

    show_image.short_description = "Thumbnail"
    show_image.allow_tags = True

簡単そうに思えます。実験を開始することにしました。models.py にメソッドを作成しました...

def test(obj):
  print obj

次に、私のモデルで試しました:

test(self.hero)

これを取得しました(値の代わりに):

 django.db.models.fields.files.ImageField

ImageField が入力されているかどうかを確認できるように、これから値を取得するにはどうすればよいですか?

編集:

class Speaker(models.Model):

    title = models.CharField(max_length=200)
    biography = models.TextField(blank=True)
    headshot = models.ImageField(upload_to=upload_to, blank=True)

    test(headshot)

    def show_image(self):
        image_url = None
        if self.headshot is not None:
            image_url = """<img src="{0}{1}" />""".format(BASE_URL, self.headshot)
        return image_url

    show_image.short_description = "Thumbnail"
    show_image.allow_tags = True
4

1 に答える 1

3

そのテスト メソッドをクラス レベルで呼び出していますが、これは意味がありません。つまり、モデル クラスが定義された時点で実行されるため、フィールド クラスが表示されます。モデルが定義されているときに発生するメタクラスがたくさんあるので、インスタンスを取得すると、フィールド クラスではなく値が表示されますが、メソッドを呼び出している時点では発生していません。

いずれにせよ、実際に処理する値があるように、モデルのインスタンスでそれを呼び出す必要があります。

あなたは Python にかなり慣れていないのではないかと思うので、ここにヒントを示します。Python シェルからこれらすべてを調べることができます。を開始./manage.py shellしてから、モデルをインポートし、モデルをインスタンス化 (またはデータベースから取得) してから、それを調べることができますdir()。コードにデバッグ関数を記述するよりもはるかに効率的です。

于 2013-08-14T16:50:27.230 に答える