Джанго - отношения в моделях - PullRequest
0 голосов
/ 15 апреля 2019

В Django есть типы полей с именами ForeignKey и OneToMany / OneToOne, мне было интересно, буду ли я использовать ForeignKey или тип отношения в качестве типа поля в этом сценарии?Пользователь в профиле был идентифицирован как OneToOne, но я не уверен насчет остальных.

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE)
    fullname = models.CharField(max_length=100)
    dob = models.DateField()
    address = models.TextField()
    city = models.CharField(max_length=100)
    profilephoto = models.ImageField(default='default_profile.jpg', upload_to='reviewApp/static/profile_images')

class Product(models.Model):
    name = models.CharField(max_length=100)
    brand = models.CharField(max_length=100)
    cost = models.DecimalField(max_digits=8, decimal_places=2, default=0.00)
    category = models.CharField(max_length=100)
    releasedate = models.DateField()
    description = models.TextField()
    productphoto = models.ImageField(default='default_product.jpg', upload_to='reviewApp/static/product_images')

class Review(models.Model):
    product = models.ForeignKey(Product)
    profile = models.ForeignKey(Profile)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    rating = model.PositiveSmallIntegerField(default=1, validators = [MinValueValidator(1), MaxValueValidator(5)])
    reviewtext = models.TextField()
    postdate = models.DateTimeField(auto_now_add=True)
    lastmodified = models.DateTimeField(auto_now=True)

ERD for Project

1 Ответ

3 голосов
/ 15 апреля 2019

Итак, из того, что я вижу здесь, было бы хорошо, если бы вы хотели следующее:

  • Пользователь может иметь только один профиль, и один профиль связан только с одним пользователем.
  • Профиль может сделать несколько Отзывов, но Отзыв принадлежит только одному профилю.
  • Продукт может иметь несколько обзоров, но обзор относится только к одному продукту.

Будьте внимательны при определении аргумента on_delete для ваших внешних ключей в зависимости от того, что вы хотите сохранить в своей базе данных после удаления.

Больше информации из документа: https://docs.djangoproject.com/fr/2.2/ref/models/fields/#arguments

...