0

У меня есть простой сайт электронной коммерции с продуктом и вариацией.Django ManyToMany Field или что-то еще?

Каждый вариант определенно будет иметь разные веса, и каждый вес будет иметь количество.

Я применил весовую модель с отношением ForeignKey к вариации, так как каждая вариация может иметь разные веса и каждый вес будет иметь количество.

class Weight(models.Model): 
    variation = models.ForeignKey(Variation) 
    size = models.DecimalField(decimal_places=3, max_digits=8, 
          validators=[MinValueValidator(Decimal('0.10'))]) 
    quantity = models.PositiveIntegerField(null=True, blank=True, help_text="Select Quantity for this size") 

Я добавил вес как встроенный и могу добавить несколько значений веса и количества в вариации. Пожалуйста, см. Это http://imgur.com/XLM6sQJ

Можно подумать, что это может быть возможно благодаря созданию вариации для каждого веса, но поскольку определено, что каждый продукт будет иметь разные веса, нет необходимости в создании вариации для каждого веса.

Теперь проблема, с которой я сталкиваюсь, заключается в том, что каждая вариация будет иметь разные веса, например, например. вариация может иметь вес 1lb, 2 lb, 3lb. Каждый из них создаст новые весовые объекты для каждого варианта. Это означает, что если другая вариация также имеет вес 1lb, 2 lb, 3lb, создаются новые объекты и НЕ используются уже существующие. Это приведет к огромной таблице db со многими значениями значений дубликатов. Это проблема, потому что существует ограниченное количество веса и количества, необходимое для любого продукта (вес = 1 фунт-100 фунтов и количество от 1 до 100), и поэтому их в идеале следует использовать повторно.

Чтобы избежать этого, я думаю, чтобы модель Weight с полем ManyToMany была изменена, а затем количество должно быть выпадающим для каждого выбранного веса. Это позволит хранить значения как веса, так и количества, и каждый продукт использует одни и те же значения в каждом экземпляре.

Проблема у меня есть:
1. Правильно ли это?
2. Если нет, то какой лучший подход для этого?
3. Если это правильный подход, как это сделать?
4. Если это правильный подход, как отобразить это на сайте администратора, так как каждый вес также должен иметь количество (я не знаю, как это сделать)?
5. Есть ли лучший способ достичь этого, и если да, то как?

ответ

0

У вас есть четкое представление о том, как вы хотите это сделать.

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

Чтобы ответить на ваш вопрос, пожалуйста, попробуйте эту модель отношения в приложении:

class Quantity(models.Model): 
    quantity = models.PositiveIntegerField() 

class Weight(models.Model): 
    weight = models.PositiveIntegerField() 
    quantity = models.ManyToManyField(Quantity) 


class Variation(models.Model): 
    name = models.CharField() 
    weight = models.ManyToManyField(Weight) 

Затем добавьте все веса, как вам требуется в классе весов индивидуальны. Поэтому после того, как вам нужно добавить вес в таблицу Variation, вы можете выбрать весы из класса Weights, в который мы уже добавили веса, которые могут потребоваться.

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

Убедитесь, что вы зарегистрировали обе модели в администраторе для удобства доступа.

Это должно решить вашу проблему за несколько записей в таблице весов.

+0

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

+0

Вы можете создать два разных соотношения для веса и количества. Я обновил ответ. – kt14