В настоящее время я пытаюсь организовать модель базы данных django для системы интернет-магазина с пользователями и продуктами.

Мой код:

class UserData(models.Model):
    username = models.CharField(max_length=100)
    password = models.CharField(max_length=500)
    bought_products = models.ForeignKey(MarketProducts, on_delete=models.CASCADE)

class VendorData(models.Model):
    username = models.CharField(max_length=100)
    password = models.CharField(max_length=500)
    sold_products = models.ForeignKey(MarketProducts, on_delete=models.CASCADE)

class MarketProducts(models.Model):
    category = models.CharField(max_length=100)
    vendor = models.ForeignKey(VendorData, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=1000)
    price = models.IntegerField()
    pub_date = models.DateTimeField('Date published')
    image = models.ImageField(upload_to=b'shop/media/images/')
    likes = models.IntegerField()
    dislikes = models.IntegerField()

Как организовать хорошую работающую систему, чтобы все продукты, купленные пользователем, сохранялись в столбце купленные_продукты , а все продукты, проданные продавцом, можно было сохранить в столбце проданные_продукты . Должен ли я использовать для этого ForeignKey или есть что-то более подходящее для этой ситуации? Кроме того, если есть что-то неразумное в существующей структуре модели базы данных (например, текущий столбец поля image сохраняет только ссылку, но не само изображение, что немного странно ...), пожалуйста, почувствуйте бесплатно поправьте меня :).

Заранее большое спасибо: D

0
Frenggie 20 Ноя 2019 в 22:44

2 ответа

В этом случае я предлагаю создать bought_products и sold_products экземпляры ManyToManyField, поскольку один и тот же продукт может быть куплен несколькими пользователями и продан нескольким поставщикам.

1
Massimo Costa 20 Ноя 2019 в 22:48
Спасибо за быстрый ответ! Не могли бы вы дать мне пример кода, как правильно реализовать отношение "многие ко многим" в моем случае?
 – 
Frenggie
20 Ноя 2019 в 22:49
Ну, я думаю, будет лучше, если вы посмотрите официальную документацию < / а>.
 – 
Massimo Costa
20 Ноя 2019 в 23:28

Во-первых, я бы начал с чтения следующей документации по настройке аутентификации django. Похоже, это поможет вам немного.

https://docs.djangoproject.com/en/2.2/topics/auth/customizing/

Кроме того, я думаю, что вам нужно лучше оценить моделирование данных, чтобы каждая модель была более четкой / четко определенной. Смотрите пример ниже:

class Products(models.Model):
    vendor = models.ForeignKey(VendorData, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=1000)
    price = models.IntegerField()
    pub_date = models.DateTimeField('Date published')
    image = models.ImageField(upload_to=b'shop/media/images/')
    likes = models.IntegerField()
    dislikes = models.IntegerField()


class Category(models.Model):
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=100)
    active = models.BooleanField(default=True)


class ProductCategory(models.Model):
    product = models.ForeignKey(Products, on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    creation_date = models.DateTimeField(auto_add_now=True)

Оттуда я построю отдельную модель, в которой будут храниться приобретенные покупателем предметы. Поскольку у вас уже есть модель, которая хранит данные о поставщике, вам не нужно ничего дополнительного, чтобы определить, сколько продаж у конкретного поставщика.

0
brandonris1 21 Ноя 2019 в 04:32