0

articles特定のユーザーがarticlehistoryレコードを作成した数を見つけたい。
そのためのモデルは次のようになります。

class Article(models.Model):
    """The basic entity of this app.)"""
    documentID = models.CharField(blank=True, max_length=1000)
    cowcode = models.IntegerField(blank=True, null=True)
    pubdate = models.DateField(default=datetime.datetime.today)
    headline = models.CharField(blank=True, max_length=1500)
    source = models.CharField(blank=True, max_length=5000)
    text = models.TextField(blank=True, max_length=1000000)
    assignments = models.ManyToManyField(Assignment)

    class Meta:
        ordering = ['pubdate']

    def __unicode__(self):
            return self.headline

class ArticleHistory(models.Model):
    """(Modelname description)"""
    article = models.ForeignKey(Article, related_name='Article History')
    coder = models.ForeignKey(User, related_name='Article History')
    last_updated = models.DateTimeField(default=datetime.datetime.now)

    def __unicode__(self):
        return self.last_updated

現時点で私がこれをやろうとしている方法は次のようなものです:

assignment.finished_articles = Article.objects.filter(cowcode=country).filter(pubdate__range=(start_date,end_date), articlehistory__coder=request.user.id).count()

ただし、これは機能せず、別の奇妙な動作を示します。
私はこれをやろうとしています:

for assignment in assignments:
    country = assignment.country.cowcode
    start_date = assignment.start_date
    end_date = assignment.end_date
    articles = Article.objects.filter(cowcode=country).filter(pubdate__range=(start_date,end_date)).select_related()
    assignment.article_num = articles.count()
    #assignment.finished_articles = Article.objects.filter(cowcode=country).filter(pubdate__range=(start_date,end_date), articlehistory__coder=request.user.id).count()

を含めようとしない限り、これはうまく機能し、finished_articles1article_numつの結果に短縮されます。

誰かがこれを解決するためのポインタを持っていれば、それは本当に素晴らしいことです.

4

1 に答える 1

0

パラメータ related_name によって作成された ForeignKey の逆関係を利用します。

  1. 属性関連の名前を に変更し"article_history_set"ます。
  2. これで、簡単なポインタが得られますuser.article_history_set。コーダーがこのユーザーに設定されている記事履歴オブジェクトのセットです。
  3. 次に、 を実行して、関連する記事を見つけることができますarticle_history.article
  4. 最後に、繰り返しを取り除き、そのリストの長さを取得する必要があります。

ここに related_name 属性の詳細があります: https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name

于 2013-07-22T11:08:05.223 に答える