Я новичок в Django, поэтому это может быть простой проблемой. Но я не могу успешно пройти через это.
Это мой models.py
class Category(models.Model):
name = models.CharField(max_length=128)
abbr = models.CharField(max_length=5)
def __unicode__(self):
return self.name
class Fabric(models.Model):
name = models.CharField(max_length=128)
abbr = models.CharField(max_length=5)
def __unicode__(self):
return self.name
class Manufacturer(models.Model):
name = models.CharField(max_length=128)
location = models.CharField(max_length=128)
name_abbr = models.CharField(max_length=5, default=None)
loc_abbr = models.CharField(max_length=5, default=None)
def __unicode__(self):
return self.name
class Images(models.Model):
design_id = models.CharField(max_length=128)
file = models.ImageField(upload_to='images')
cost_price = models.FloatField()
category = models.ForeignKey(Category, on_delete=models.CASCADE)
fabric = models.ForeignKey(Fabric, on_delete=models.CASCADE)
manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE)
selling_price = models.FloatField()
aliveness = models.IntegerField()
date_added = models.DateTimeField(default=datetime.datetime.now)
set_cat = models.IntegerField()
set_cat_no = models.IntegerField()
set_cat_name = models.CharField(max_length=50, blank=True)
Я создаю систему базы данных для управления одеждой, которая содержит дизайны тканей. Мой forms.py
class ImagesForm(forms.ModelForm):
class Meta:
model = Images
fields = ('file','cost_price','set_cat_no','set_cat_name',)
Мой views.py
@login_required
def uploadphoto(request):
context = RequestContext(request)
context_dict = {}
if request.method == 'POST':
form = ImagesForm(request.POST,request.FILES)
if form.is_valid():
image = form.save(commit=False)
image.save()
return render_to_response(request,'cms/upload-photo.html', {'upload_image': form})
else:
print form.errors
else:
form = ImagesForm()
context_dict = {'upload_image': form}
return render_to_response('cms/upload-photo.html',context_dict, context)
Мой файл upload-photo.html
{% block main %}
<form id = "upload_form" method = "post" action = "/zoomtail/upload-photo/" enctype = "multipart/form-data">
{% csrf_token %}
{{ upload_image }}
</form>
{% endblock %}
Проблема здесь в том, что когда я перехожу к / upload-photo /, я не вижу раскрывающихся списков внешних ключей для категорий, ткани и производителей. Я прочитал, что он должен сгенерироваться автоматически, но не вижу.
И selling_price должен быть рассчитан на основе данного процентного увеличения от cost_price, которое необходимо ввести в форму. Как мне это сделать? И aliveness одежды по умолчанию должен быть установлен как 1. Как это сделать?
Поле set-cat одежды равно 1, если оно принадлежит набору, и 2, если оно принадлежит к каталогу. Как мне получить переключатель, спрашивающий, установлен ли он или каталог, и это должно быть записано как целое число в базе данных?
И поле идентификатора дизайна одежды должно быть строкой, которая содержит аббревиатуры категории, ткани, производителя и т. д. Всех полей, к которым она принадлежит. Как мне сделать это динамически?
Я знаю, это очень длинный вопрос, но я новичок, и это буквально вызывает у меня головную боль уже несколько дней. Буду очень благодарен тем, кто на это ответит.
добавить поля в поля в классе ImagesForm
Хорошо, это работает, спасибо.






Я считаю, что проблема с раскрывающимся списком заключается в том, что вы исключили поля из ImageForm. У тебя есть:
fields = ('file','cost_price','set_cat_no','set_cat_name',)
но должны иметь:
fields = ('file','cost_price','set_cat_no','set_cat_name', 'category', 'fabric', 'manufacturer,) `
если это не сработает, есть ли в вашей базе данных какие-либо варианты для Categories, Fabric и Manufacturer? Если ваши таблицы пусты, раскрывающийся список будет пустым. Если в базе данных есть значения, создается ли HTML, но значение метки пустое (например, <option>{this is blank}</option>)? В django вы можете переопределить функцию __str__, чтобы указать, как будут помечены параметры раскрывающегося списка.
Отмените __str__ следующим образом:
class Category(models.Model):
name = models.CharField(max_length=128)
abbr = models.CharField(max_length=5)
def __unicode__(self):
return self.name
def __str__(self):
return self.name
selling_price и любое другое вычисленное значение в блоке if request.method == 'POST'.Пример:
def uploadphoto(request):
context = RequestContext(request)
context_dict = {}
if request.method == 'POST':
form = ImagesForm(request.POST,request.FILES)
#- Calculate value(s) here -#
if form.is_valid():
image = form.save(commit=False)
image.save()`
Спасибо. Для 2 и 4 можно точный код функциональности?
Я снова спросил об этом здесь. stackoverflow.com/questions/50849734/…
Лучше задавать отдельные вопросы, чем обращаться за помощью по 4 разным вопросам. Во-первых, не используйте
render_to_response, он устарел. Вместо этого используйтеrender. Что касается вашего первого выпуска, вы не включили'category'вfields, поэтому он не будет включен в форму.