Итак, я создаю приложение для рекламы. В основном, пользователи вступают в систему, и они могут размещать рекламу на что-то. Я разместил модели ниже, но в основном у меня есть категория (скажем, электроника или недвижимость), затем подкатегория (электроника-> Ноутбук или недвижимость-> дом, квартира и т. Д.) Проблема в том, что у разных предметов есть разные атрибуты. Например, ноутбук может иметь атрибуты «screen», «ram» и «hdd», в то время как «Car» может иметь «пробег» и «условие». Я решил сохранить эти атрибуты в JSONField.Загрузка динамических атрибутов модели в форме - django
from django.db import models
from django.contrib.postgres.fields import JSONField
class Category(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class SubCategory(models.Model):
category = models.ForeignKey('Category')
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(max_length=255)
subcategory = models.ForeignKey('SubCategory')
description = models.TextField()
price = models.IntegerField()
price_fixed = models.BooleanField(default=False)
monthly_payments = models.BooleanField(default=False)
created = models.DateField(auto_now_add=True)
custom_attributes = JSONField(default=dict)
def __str__(self):
return self.name
Теперь, как обрабатывать эти пользовательские атрибуты в форме и представлениях? Мне нужно сделать так, чтобы, когда пользователь выбирает категорию/подкатегорию из выпадающего списка, эти атрибуты должны отображаться в виде текстовых полей, и пользователь вводит размер экрана, размер или цвет футболки и т. Д.
Это мое первое приложение django и книга, которую я изучил, не охватывали такие вещи, и я не совсем уверен, куда идти отсюда, поиск в google/SO не нашел мне решения.
Какие данные должны входить в value_type? – goran
Тип значения, хранящегося в этом поле - строка, int и т. Д. –
Важно только, если вы хотите сделать что-то с этим значением (например, проверить, какой автомобиль самый тяжелый). Если вы хотите хранить или фильтровать по этим значениям, вы можете иметь дело без 'value_type' –