#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