首页 > 解决方案 > 在一个视图中显示多个模型并获取每个帖子的 slug url - django

问题描述

我试图在一个视图和一个模板中显示来自多个模型的数据,我成功了,但我有问题,问题是android模型中的帖子首先显示,因为我已经android在 html 页面中添加了第一个但我想要的做的是按发布日期显示帖子我该怎么办

模型.py:

class android(models.Model):
    name = models.CharField(max_length=50,default="")
    slug = models.SlugField(max_length=250,default="")
    post_date = models.DateTimeField(auto_now_add=True, null=True, blank=True)

    def get_image(self):
        if self.app_image and hasattr(self.app_image, 'url'):
            return self.app_image.url
        else:
            return '/path/to/default/image'

    def __str__(self):
        return self.name
        
    class Meta:
        ordering = ('-post_date',)


class PCgames(models.Model):
    name = models.CharField(max_length=50,default="")
    slug = models.SlugField(max_length=250,default="")
    post_date = models.DateTimeField(auto_now_add=True, null=True, blank=True)

    def get_image(self):
        if self.app_image and hasattr(self.app_image, 'url'):
            return self.app_image.url
        else:
            return '/path/to/default/image'

    def __str__(self):
        return self.name
        
    class Meta:
        ordering = ('-post_date',)

视图.py:

def home_page(request):
    pcgamesforhome = PCgames.objects.all()
    androidforhome = Android.objects.all()
    context = {'pcgamesforhome' : pcgamesforhome,'androidforhome' : androidforhome}
    return render(request,'html_file/home.html',context=context)

主页.html:

 <div class="container">
     <div class='row'>


{% for android in androidforhome %}

      <div class='col-xs-12 col-sm-6 col-md-4 website-thumb'>
                    
         <a href="{{ android.slug }}">
                  
         <img src="{{ android.get_image }}" class='image_control_for_home_page_pc_games' alt=''> </a>
                    
         <h3><a href="{{ home_page.slug }}" class="font_control_for_home_page_pc_games_name">{{ android.name }}</a></h3> </div>
{% endfor %}
  </div>

        <div class="container">
            <div class='row'>


{% for home_page in pcgamesforhome %}

      <div class='col-xs-12 col-sm-6 col-md-4 website-thumb'>
                    
           <a href="{{ home_page.slug }}">
                  
           <img src="{{ home_page.get_image }}" class='image_control_for_home_page_pc_games' alt=''> </a>
                    
           <h3><a href="{{ home_page.slug }}" class="font_control_for_home_page_pc_games_name">{{ home_page.name }}</a></h3> </div>
{% endfor %}
  </div>

那么现在我应该怎么做才能按日期显示所有模型的帖子?

标签: djangodjango-viewsdjango-templates

解决方案


您的数据库结构错误。您可以拥有一个模型和一个指定对象类型的字段,而不是为 android 和 PC 提供两个模型

class Foo(models.Model):
    Type = (
        ('android', 'android'),
        ('pc', 'pc'),
    )
    name = models.CharField(max_length=50,default="")
    slug = models.SlugField(max_length=250,default="")
    post_date = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    type = models.CharField(max_length=10, choices=Type)

如果您想为每个 android 或 pc 设置一个特殊字段,您可以创建具有空白和 null tr​​ue attr 的字段。

视图.py:

# get all of them and order them by creation date
Foo.obejcts.all().order_by('-post_date')

# get android type objects
Foo.objects.filter(type='android')

# get pc type objects
Foo.objects.filter(type='pc')

推荐阅读