Поля Django в форме

Я новичок в 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 %}
  1. Проблема здесь в том, что когда я перехожу к / upload-photo /, я не вижу раскрывающихся списков внешних ключей для категорий, ткани и производителей. Я прочитал, что он должен сгенерироваться автоматически, но не вижу.

  2. И selling_price должен быть рассчитан на основе данного процентного увеличения от cost_price, которое необходимо ввести в форму. Как мне это сделать? И aliveness одежды по умолчанию должен быть установлен как 1. Как это сделать?

  3. Поле set-cat одежды равно 1, если оно принадлежит набору, и 2, если оно принадлежит к каталогу. Как мне получить переключатель, спрашивающий, установлен ли он или каталог, и это должно быть записано как целое число в базе данных?

  4. И поле идентификатора дизайна одежды должно быть строкой, которая содержит аббревиатуры категории, ткани, производителя и т. д. Всех полей, к которым она принадлежит. Как мне сделать это динамически?

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

Лучше задавать отдельные вопросы, чем обращаться за помощью по 4 разным вопросам. Во-первых, не используйте render_to_response, он устарел. Вместо этого используйте render. Что касается вашего первого выпуска, вы не включили 'category' в fields, поэтому он не будет включен в форму.

Alasdair 13.06.2018 18:22

добавить поля в поля в классе ImagesForm

Hozayfa El Rifai 13.06.2018 18:50

Хорошо, это работает, спасибо.

Keerthan Bhat 13.06.2018 20:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
164
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Я считаю, что проблема с раскрывающимся списком заключается в том, что вы исключили поля из 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
  1. Вы можете вычислить значение 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()`
  1. Пожалуйста, см. этот пост здесь для использования переключателей
  2. Вы бы сделали это в том же месте, что и # 2 выше.

Спасибо. Для 2 и 4 можно точный код функциональности?

Keerthan Bhat 14.06.2018 06:55

Я снова спросил об этом здесь. stackoverflow.com/questions/50849734/…

Keerthan Bhat 14.06.2018 06:57

Другие вопросы по теме