3

これがアプリ ブログのモデルであるとします。

class Blog(models.Model):
    title = models.CharField(max_length=200)
    pub_date = models.DateTimeField(default=datetime.now)
    creator = models.ForeignKey(User)
    content = BleachField()

これは、アプリのステータスの別のモデルです。

class Status(models.Model):
    content = BleachField()
    pub_date = models.DateTimeField(default=datetime.now)
    creator = models.ForeignKey(User)

どうすればこのようなものを思い付くことができますか:

from blog.models import Blog
from status.models import Status

blog = Blog.objecs.all()
status = Status.objects.all()
all = blog | status

テンプレート内のユーザーのすべての更新を表示します。

updates = user.all_set.all()

編集:

そのため、私ができるテンプレートでは、次のようなものです:

{% for each in all %}
    ....
{% endfor %}

私が望んでいないのは、ホームページで、すべてのユーザーのアクティビティの更新を最新の順序で表示したいということです。

例えば:

'User updated with new status: blah blah'
'User published a new Blog'
'User published a new Blog'

他の多くのソーシャル ネットワーキング サイトと同様です。また、両方を別々に表示しないでください。同様に、ユーザーのプロファイルで、その特定のユーザーのすべてのアクティビティを表示します。

4

2 に答える 2

1

これにはdjangoプロキシモデルを使用する必要があります。ドキュメントはこちらです。

次に例を示します。

class BlogAndStatus(models.Model):
    title = models.CharField(max_length=200)
    pub_date = models.DateField()
    creator = models.ForeignKey(User)
    content = models.TextField()
    is_blog = models.BooleanField(default=False)
    is_status = models.BooleanField(default=False)


class BlogManager(models.Manager):
    def get_query_set(self):
        return super(BlogManager, self).get_query_set().filter(is_status=True)


class Blog(BlogAndStatus):
    objects = BlogManager()

    class Meta:
        proxy = True

    def save(self, *args, **kwargs):
        self.is_blog = True
        return super(Blog, self).save(*args, **kwargs)


class StatusManager(models.Manager):
    def get_query_set(self):
        return super(StatusManager, self).get_query_set().filter(is_blog=True)


class Status(BlogAndStatus):
    objects = StatusManager()

    class Meta:
        proxy = True

    def save(self, *args, **kwargs):
        self.is_status = True
        return super(Status, self).save(*args, **kwargs)

次の方法ですべてのオブジェクトを取得できます。

BlogAndStatus.objects.all()

または、マネージャーを使用して、次のステータスのみを使用します。

Status.objects.all()

forms.py で通常のモデル フォームを使用できますが、フィールド 'is_blog' または 'is_status' を True に設定してください。ブログの例:

class BlogForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(BlogForm, self).__init__(*args, **kwargs)
        self.initial['is_blog'] = True

    class Meta:
        model = Blog
        fields = ('title', 'content', 'is_blog')
        widget = {'is_blog': forms.HiddenInput()}
于 2013-11-03T16:32:52.360 に答える
-1

なぜあなたがそのような奇妙なモデルを持っているのかわかりません。しかし、あなたができる最善のことはこれです:

from django.shortcuts import render

def foo(request):
   photo = Photo.objects.filter(creator=request.user)
   status = Status.objects.filter(creator=request.user)
   context = {'photo': photo, 'status': status}
   return render(request, 'template.html', context)

次に、テンプレートで:

<h4>Photos:</h4>
  <ul>
  {% for p in photo %}
     <li>{{ p }}</li>
  {% endfor %}
  </ul>
<h4>Status:</h4>
  <ul>
  {% for s in status %}
     <li>{{ s }}</li>
  {% endfor %}
  </ul>
于 2013-11-03T11:55:16.280 に答える