как обработать 2 типа полей для одного поля модели?

#django #python-3.x #django-models

#django #python-3.x #django-модели

Вопрос:

У меня есть одно поле модели, некоторые из его значений представляют собой значки шрифтов, другие — файлы изображений, как обрабатывать 2 типа в одном поле? эти элементы списка имеют 2 разных типа, некоторые из них представляют собой ссылки на значки шрифтов, другие — файлы изображений, мне нужно поместить их в поле модели, как?

      <ul class="list-inline dev-icons">

              <li class="list-inline-item">
                <i class="fab fa-html5"></i>
              </li>
              <li class="list-inline-item">
                <i class="fab fa-css3-alt"></i>
              </li>
              <li class="list-inline-item">
                <i class="fab fa-js-square"></i>
              </li>
              <li class="list-inline-item">
                <i class="fab fa-sass"></i>
              </li>

              <li class="list-inline-item">
                <i class="fab fa-python"></i>
              </li>

              <li class="list-inline-item">
                <img class="img-fluid img-profile  mx-auto mb-2" src="{% static 'img/sql.png' %}">
              </li>
              <li class="list-inline-item">
                <img id="logo" src="{% static 'img/logo.png' %}">
              </li>
    </ul>
  

views.py:

     from django.shortcuts import render, redirect

    from django.views.generic.base import TemplateView

    from .models import *

    class homepage(TemplateView):
        template_name = "index.html"
        def get_context_data(self, **kwargs):
            context = super(homepage, self).get_context_data(**kwargs)
            context['About'] = About.objects.all()
            context['Experience'] = Experience.objects.order_by('date')
            return context
  

models.py:

     from django.db import models



    class About(models.Model):
        name         = models.CharField(max_length=200)
        address      = models.CharField(max_length=200)
        mobile       = models.CharField(max_length=200)
        email        = models.EmailField(blank=True)
        description  = models.TextField()
        #interests   = models.TextFileld()

        def __str__(self):
            return self.name


    class Experience(models.Model):
        title    = models.CharField(max_length=200)
        company  = models.CharField(max_length=200)
        date     = models.CharField(max_length=200)
        summery  = models.TextField()


        def __str__(self):
            return self.title
  

итак, мне нужно создать модель навыков, куда я могу добавить свои навыки

Комментарии:

1. ваш код и что вам действительно нужно?

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

Ответ №1:

позвольте мне попытаться найти то, что вам нужно.

1-у вас есть шаблон (html-код, который вы пишете под своим вопросом), и вы хотите получить доступ к введенным данным в вашем бэкэнде в view или models? 2-у вас есть приведенный выше шаблон, и вы хотите создать для него модель?

у меня нет разрешения добавлять комментарии, поэтому я просто оставляю ответ!

Комментарии:

1. это именно выбор 2

2. отлично, теперь мы нашли проблему. расскажите нам о вашем model.py . есть ли у вас какая-либо модель в вашем приложении или проекте? если у вас есть model.py , view.py и teamplate.html оставьте этот код здесь, обновив вопрос.

Ответ №2:

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

сначала вам нужно добавить <input> тег в свой template.html , чтобы пользователь мог вводить в него значение, и вы могли получить доступ к значению в view.py . для лучшего варианта используйте <form> тег и вставляйте <input> в него столько, сколько вам нужно. что-то вроде этого:

template.html:

 <form action="user/new_user/" method="post" > 
   <input name="name_value"
   <input name="address_value">
   <input name="mobile_value">
   <input name="email_value">
   <input name="description_value"> 
   <button type=submit>submit form</button>
</form>

<div>
<p>{{message}}</p>
<p>{{boo}}</p>
</div>
  

когда пользователь нажмет кнопку отправки, откроется страница, URL=user/new_user/ поэтому добавьте этот URL в urls.py :

 import MyAppName.views

urlpatterns = [
    path('user/new_user/', MyAppName.views.AddUser),
]
  

приведенный выше URL-адрес будет передан нам function AddUser в views.py . теперь мы находимся в, views.py и мы хотим получить доступ к <input> значению здесь . все <input> значения будут в request , и мы легко получим доступ к значению только с помощью request.Post.get("name_of_input_tag") :

views.py

 from django.shortcuts import render

def AddUser(request): # attention all def in views.py need "request" and its necessary .
     inputted_name = request.Post.get("name_value")
     inputted_address= request.Post.get("address_value")
     inputted_mobile= request.Post.get("mobile_value")
     inputted_email= request.Post.get("email_value")
     inputted_description = request.Post.get("description_value")
     #now we have all inputted values from template , so do what you want!

     #for example adding new "About"
     About.objects.create(
           name=inputted_name,
           address=inputted_address,
           mobile=inputted_mobile,
           email=inputted_email,
           description=inputted_description
           )
      # then we show some template with specific context
      context = {
      "message" : "new About created!",
      "boo" : "foo boo doo ",
      }
      return render {request , "template.html" ,context}
  

теперь вы знаете, как можно вводить данные в шаблон и получать к ним доступ в режиме просмотра. итак, для сохранения «навыка» вы можете добавить новое поле в experience модель и установить значение, которое вы хотите в view.py by request.Post.get("skill_value") . не забудьте использовать <input> ‘s name в request.Post.get("input_name") .

models.py :

 class Experience(models.Model):
        title    = models.CharField(max_length=200,null=True,blank=True)
        company  = models.CharField(max_length=200,null=True,blank=True)
        date     = models.CharField(max_length=200,null=True,blank=True)
        summery  = models.TextField(,null=True,blank=True)
        skill = models.TextField(null=True,blank=True)  # add this field