0

こんにちは、django の驚くべき世界を初めて知りました。

基本的には、サイトに新しいブログ投稿が作成されたときにユーザーが電子メールで受け取る更新を改善するために使用できる、かなりユニークな電子メール通知システムを作成する必要があるプロジェクトに取り組んでいます。

このプロジェクトについては、学習曲線が非常に急勾配であることが証明されているため、たくさんの質問があると思うので、最初に自分ですべて試してから、行き詰まったときに助けを求めてここを実行すると思いました!

基本的に、ユーザーは次のすべての新しいブログ投稿の更新を受け取るようにオプトインするか、お気に入りの著者などのチェック ボックスから選択できます。

私が最初に遭遇したのは、データベースからユーザーを引き抜くことです。各ブログのすべてのユーザー詳細を取得する方法は知っていますが、これにより明らかに、複数のブログを公開しているユーザーのユーザー詳細が重複して返されます。そのため、ブログを投稿したユーザーのユーザー情報のみを取得し、その詳細を一度だけ取得する方法が必要です。

モデル

class Blog(models.Model):

     user = models.ForeignKey(User, help_text = "The User posting this blog entry")
     news = models.ForeignKey(News, unique = True, blank = True, null = True, help_text = "Is this Blog entry related to a news posts IE and Expert Analysis")
     title = models.CharField(max_length = 120, help_text = "The Title of this blog entry")
     slug = models.SlugField(max_length = 150, help_text = "This Field is auto-populated by the title field, its simply used for the CMS urls")
     info = models.TextField()
     categories = models.ManyToManyField(Categories)
     sectors = models.ManyToManyField(Sectors)
     tags = models.ManyToManyField(Tags)
     published = models.DateTimeField()
     status = models.CharField(max_length=1, choices=STATUS_CHOICES, default = 'd')

     class Meta:
         verbose_name_plural = "Blog entries"
         verbose_name = "Blog"
         ordering = ['-published']

     def __unicode__ (self):
         return self.title

ご覧のとおり、作成者の詳細を保存するための外部キーとして django のユーザー モデルを使用しています。このアプローチを破棄して、ブログの作成者用に別のモデルを設定する必要がありますか、それとも組み込みのユーザー モデルを使用して、私がやろうとしていることを達成できますか。

結論として、私が目指しているのは、ブログ投稿を投稿したすべてのユーザーのリストを取得できるが、詳細を一度だけ取得できるようにすることです。これにより、チェックボックスを使用してフォームを作成できるように、名前と ID のリストが得られますユーザーがオプトインして更新を受信できるようにチェックを入れることができます!

助けてくれてありがとう!!

4

2 に答える 2

1

ダニエルのソリューションがどのように機能するかはわかりません。ブログ モデルに関連するユーザー モデルにブログ フィールドがないためです (私は認識しています)。しかし、それが機能する場合、それは素晴らしいことです。

それでも問題が解決しない場合は、これが役立つかもしれません。選択肢は 2 つあります。まず、必要なのは ID と名前だけである場合、これでうまくいく可能性があります。

users = Blog.objects.all().order_by('user__username').values('user__id', 
        'user__username').distinct()

第二に、実際の User オブジェクトが必要な場合は、これが目的になる可能性があります。

userids = Blog.objects.all().values_list('user__id', flat=True)
users = User.objects.filter(pk__in=userids).order_by('username')
于 2011-05-04T14:36:13.750 に答える
1

少なくとも 1 つのブログ エントリを持つユーザーに対して 1 つのクエリを実行できます。

User.objects.exclude(blog=None)
于 2011-05-04T13:56:38.747 に答える