Django从外键获取数据

时间:2019-09-26 16:44:17

标签: python django model foreign-keys

我是从事新闻网站工作的新手(或者至少最近几天尝试过很多“问题”,哈哈),试图尽我所能学习Django。

这就是我想要做的:

我有一个Article模型,它曾经有6个图像字段,我曾经将它们发送到模板并渲染图像,每个图像字段都有自己的名称,并且在世界范围内都很好。 然后,我承担了将Article图片放在单独的Image模型中的任务。 所以我这样做了:

ss -tn 'dport ldap || sport ldap'

但是到目前为止,我无法使用来访问模板中的图像

#include <stdio.h>

/*Define structure
 *     ------------------*/
struct date
{
    int month;
    int day;
    int year;
};


/*Declare function prototypes
 *     -----------------------------*/
struct date get_date (struct date);
long int calc_date_number (struct date); /* now return the number */ 

/* use int instead of void */
int main (void)
{
    struct date   udate, calc_date;
    printf("Welcome to the Date to Day-of-the-Week program.\n\nThe program will give the day of the"
    "for any date from 1/1/1900.\n\n");

     calc_date = get_date (udate); /* store the result in calc_date */
     long int n = calc_date_number (calc_date); /* store the result in n */
     printf("calculated date number : %ld\n", n); /* display the value just calculated */
     return 0; /* return code of the program */:
}



/*Define functions get_date
 *     ----------------------------*/
struct date get_date (struct date udate)
{
    do
    {
        printf ("Enter the date (mm/dd/yyyy): ");
        scanf ("%d/%d/%d", &udate.month, &udate.day, &udate.year);
        if (udate.month < 1 || udate.month > 12)
            printf ("Invalid month. Please re-enter date.\n\n");
        else if (udate.day <1 || udate.day > 31)
            printf ("Invalid day. Please re-enter date.\n\n");
        else if (udate.year < 1900)
            printf ("Invalid year. Please re-enter date.\n\n");
        else if (udate.month ==2 && udate.day == 29 && (udate.year !=0 && (udate.year == 0 || 
            udate.year % 400 != 0)))
            printf ("Invalid date. Not a leap year. Please re-enter date.\n\n");

    }while (udate.month < 1 || udate.month > 12 || udate.day < 1 || udate.day > 31 || udate.year < 
    1900);

    return udate;

} /*End get_date*/

/*Define function calc_date_number
 *     ----------------------------------*/
long int calc_date_number (struct date calc_date)
{

    printf("calc_date is %i   %i   %i\n\n", calc_date.month, calc_date.day, calc_date.year);
    long int n;

    if (calc_date.month <= 2)
    {
        calc_date.year = calc_date.year - 1;
        calc_date.month = calc_date.month + 13;
    }
    else
    {
        calc_date.month = calc_date.month + 1;
    }

    n = 1461 * calc_date.year / 4 + 153 * calc_date.month / 5 + calc_date.day;
    return n; 
}/*End function calc_date_number*/

或任何其他组合。这是为什么 ? 我是否正确设置了模型?有人建议我将模型字段从ForeignKey更改为OneToOneField,但是对于为什么以及如何我没有得到很多反馈。

那么,我将如何创建一个遍历Articles模型的for循环,然后获取每个Article的相关图像?我本质上希望它的行为像我以前一样拥有6个不同的字段。 (我必须这样做,这是任务的一部分)。

这是我的观点和我用来遍历文章并在首页上显示6条最新新闻的“索引”模板。 (请忽略标签,我知道它们不能像这样工作。模板只是为了让您了解我在说什么)

我的views.py:

class Article(models.Model):
    title = models.CharField('title', max_length=200, blank=True)
    slug = AutoSlugField(populate_from='title', default="",
                         always_update=True, unique=True)
    author = models.CharField('Author', max_length=200, default="")
    description = models.TextField('Description', default="")
    is_published = models.BooleanField(default=False)
    article_text = models.TextField('Article text', default="")
    pub_date = models.DateTimeField(default=datetime.now, blank=True)
    article_category = models.ForeignKey(Category, on_delete="models.CASCADE", default="")

    def __str__(self):
        return self.title


class ArticleImages(models.Model):
    article = models.ForeignKey(Article, on_delete="models.CASCADE", related_name="image")
    image = models.ImageField("image")
    name = models.CharField(max_length=50, blank=True)
我在旧模型中使用的

模板:

 {{ article.image.url }} or {{ article.image.image.url }}

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要遍历图像,因为针对单个文章对象有许多图像。您可以像下面这样在模板中显示图像:

{% if latest_article_list.articleimages %}

   {% for articleimage in latest_article_list.articleimages.all %}

      <img src="{{ articleimage.image.url }}" class="d-block w-100" alt="...">

   {% endfor %}
{% endif %}