私は漫画本データベースで作業していますが、主なカバーとバリアントのカバーがあります。私はすべてのメインカバーを表示するページを持っていますが、出版日の順番でバリアントカバーも組み合わせたいと思います。メイン表紙用ManyToMany Djangoでのモデル/ビューの結合、フィルタリング
class Image(models.Model):
CATEGORY_CHOICES = (
('Cover', 'Cover'),
('Scan', 'Scan'),
('Other', 'Other'),
)
title = models.CharField(max_length=128)
number = models.CharField(max_length=20, help_text="Do not include the '#'.")
image = models.ImageField(upload_to="images/")
category = models.CharField(max_length=10, choices=CATEGORY_CHOICES)
### The variant cover is determined by the category_choice 'Cover'. ###
contributor = models.ManyToManyField(Contributor, blank=True, null=True)
date_added = models.DateField(auto_now_add=True, auto_now=True)
def __unicode__(self):
return self.title
class Meta:
ordering = ['title']
class Issue(models.Model):
CATEGORY_CHOICES = (
('Major', 'Major'),
('Minor', 'Minor'),
('Cameo', 'Cameo'),
('Other', 'Other'),
)
title = models.ForeignKey(Title)
number = models.CharField(max_length=20, help_text="Do not include the '#'.")
pub_date = models.DateField(blank=True, null=True)
cover_image = models.ImageField(upload_to="covers/", blank=True, null=True)
### This would be where the main image goes. ^^^ ###
images = models.ManyToManyField(Image, related_name="images_inc", blank=True, null=True)
### This is where the variant covers go.^^^ ###
has_emma = models.BooleanField(help_text="Check if Emma appears on the cover.")
私のviews.pyは、次のようになります:
def covers(request):
sort_by = request.GET.get('sort', 'pub_date')
if sort_by not in ['-date_added', 'date_added', '-pub_date', 'pub_date']:
sort_by = '-date_added'
issues = Issue.objects.filter(has_emma=True).order_by(sort_by).select_related(depth=1)
return render_to_response('comics/covers.html', {'issues': issues}, context_instance=RequestContext(request))
しかし、私はバリアントがあまりにもしていないカバーを表示したいと思いますこれは私のモデルの一部がどのように見えるかですcover_image
。これを行う方法はありますか?たぶん何かimage
で(カバーでImage
モデルの)カテゴリをフィルタリング?
私は、もちろん、これを行うことができます。
def variants(request):
Issue.objects.filter(has_emma=True).order_by(sort_by).select_related(depth=1)
images = Image.objects.filter(category='Cover').order_by('id')
return render_to_response('comics/variants.html', {'images': images}, context_instance=RequestContext(request))
しかしdef covers
がするように、それは私に十分な柔軟性を与えるものではありません、と私は彼らがdef covers
のように、PUB_DATEによって結合してソートします。
編集
models.py:
class Image(models.Model):
CATEGORY_CHOICES = (
('Cover', 'Cover'),
('Scan', 'Scan'),
('Other', 'Other'),
)
title = models.CharField(max_length=128)
image = models.ImageField(upload_to="images/")
category = models.CharField(max_length=10, choices=CATEGORY_CHOICES)
date_added = models.DateField(auto_now_add=True, auto_now=True)
def __unicode__(self):
return self.title
class Meta:
ordering = ['title']
class Issue(models.Model):
title = models.ForeignKey(Title)
number = models.CharField(max_length=20)
######
has_emma = models.BooleanField(help_text="Check if cover appearance.")
cover_image = models.ImageField(upload_to="covers/", blank=True, null=True)
images = models.ManyToManyField(Image, related_name="images_inc", blank=True, null=True)
######
def get_images(self):
''' Returns a list of all cover images combined,
"main" cover image first.
'''
images = [self.cover_image]
for image in self.images.filter(category='Cover'):
images.append(image.image)
return images
views.py:
def covers(request):
sort_by = request.GET.get('sort', '-pub_date')
if sort_by not in ['-date_added', 'date_added', '-pub_date', 'pub_date']:
sort_by = '-date_added'
issues = Issue.objects.filter(has_emma=True).order_by(sort_by)
return render_to_response('template.html', {'issues': issues,}, context_instance=RequestContext(request))
template.html: {% for issue in issues %}{% for image in issue.get_images %}{{ image.image }}{% endfor %}{% endfor %}
は - しかし、{% for issue in issues %} {% for image in issue.get_images %} {{ issue.cover_image }} {% endfor %} {% endfor %}
は繰り返しますが、何も表示されませんを表示するモデルImage
に分類されているバリアントカバーがある場合はIssue
モデルのです。
これを修正してすべてを正しく表示できるようにするにはどうすればよいですか?そして、再び記録のために、私は(Issue
モデルから)とを組み合わせてImage
モデルを定義して表示します。私が正しくあなたの問題を理解していれば
私はあなたの問題正しいアム'covers()'ビューでレンダリングされたテンプレートのバリアント画像にアクセスすることはできません。 – Tony
私はバリアント画像(category = Coverの 'images = ManyToManyField(Image)')にアクセスし、それらを 'cover_image'と組み合わせて' pub_date 'でソートするようにしたいと思います。 – AAA