какой тип связи с базой данных я должен использовать? - PullRequest
0 голосов
/ 13 июня 2018
from django.db import models

class Reporter(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField()

    def __str__(self):
        return "%s %s" % (self.first_name, self.last_name)

class Article(models.Model):
    headline = models.CharField(max_length=100)
    pub_date = models.DateField()
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)

    def __str__(self):
        return self.headline

    class Meta:
        ordering = ('headline',)

Я нашел этот пример для многих примеров отношений в документах Django, как бы я занялся другим классом под названием Magazine.В журнале класса он будет содержать много статей, написанных многими журналистами.Буду ли я использовать отношения один-ко-одному или мне понадобятся отношения один-к-одному?Спасибо заранее за любую помощь

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Это либо ForeignKey от Article до Magazine, либо ManyToManyField между Article и Magazine.Это зависит от того, может ли статья появиться в нескольких журналах (часто журналисты продают одну и ту же статью один и тот же разным журналам, тогда они, за исключением некоторого форматирования, дословно одинаковы).

В случае, если каждая статья появляется в одном журнале, мы реализуем ее следующим образом:

class Article(models.Model):
    headline = models.CharField(max_length=100)
    pub_date = models.DateField()
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)
    <b>magazine = models.ForeignKey(Magazine, on_delete=models.CASCADE)</b>

    def __str__(self):
        return self.headline

    class Meta:
        ordering = ('headline',)

Если статья может остаться неопубликованной , то вы такжевероятно, нужно установить null=True в конструкторе ForeignKey.

В случае ManyToManyField, django будет неявно создать таблицу типа article_magazine, которая хранит сопоставления из *От 1030 * с до Magazine с (но если вы сделаете запрос, вы получите только Magazine с).

Очень вероятно, что отношение не a OneToOneField.На самом деле OneToOneField - это ForeignKey с unique=True.Таким образом, это означает, что no два Article s публикуются в то же самое Magazine.Следовательно, это означает, что каждый Magazine не имеет или точно один Article, связанный с ним.

0 голосов
/ 13 июня 2018

В соответствии с вашими потребностями, я думаю, вам следует обратиться к Отношение ко многим .

  1. По вашему мнению, статью можно опубликовать с использованием нескольких репортеров.объекты, и Reporter имеет несколько объектов Article, тогда обратитесь к https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_many/

  2. Если вы поддерживаете один Logic для одного репортера на статью и несколько статей для репортера, посетите: https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_one/.

0 голосов
/ 13 июня 2018

Это действительно зависит от того, что вы хотите сделать ... Вы должны быть более конкретным и рассказать нам, в чем ваша проблема на самом деле.

  1. Если у вас есть n статей в вашемЖурнал, и каждая статья встречается только в одном журнале, вы должны использовать один ко многим.

  2. Если статья может появляться в нескольких журналах, вы должны использовать многие кмного отношений.

Кстати, это не вопрос питона ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...