#python #django #django-models
#python #django #django-модели
Вопрос:
В 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)
Ответ №1:
Итак, из того, что я вижу здесь, кажется, хорошо, если вы хотите следующее:
- У пользователя может быть только один профиль, и один профиль связан только с одним пользователем.
- Профиль может выполнять несколько проверок, но проверка принадлежит только одному профилю.
- Продукт может иметь несколько обзоров, но обзор относится к одному продукту.
Будьте осторожны, чтобы определить аргумент on_delete для ваших внешних ключей в зависимости от того, что вы хотите сохранить в своей базе данных после удаления.
Дополнительная информация из документа: https://docs.djangoproject.com/fr/2.2/ref/models/fields/#arguments
Комментарии:
1. Это именно то, чего я хочу, спасибо за ваш комментарий!
2. Но если вы хотите иметь более одного профиля для просмотра одного и того же продукта, вам необходимо установить для profile и product отношение «многие ко многим».
3. @joshlsullivan Но разве это не было бы неверно, поскольку один отзыв может быть связан только с одним профилем, в то время как в одном профиле может быть много отзывов?
4. @RajR96 Я думаю, что я неправильно понял. Я думал, вы хотите, чтобы более одного профиля могли создавать более одного обзора.