Como posso cadastrar múltiplas imagens relacionadas a um cliente e visualiza-las no front

129 views
Skip to first unread message

Alexandre Leonel

unread,
Dec 9, 2020, 7:34:06 AM12/9/20
to django...@googlegroups.com

Pessoal bom dia, eu estou empenhado em meu primeiro projeto, depois de estudar uns dois anos a linguagem python e o framework Django decide colocar a mão na massa, ter algo a apresentar.
Bom estou tendo uma enorme dificuldade no seguinte aspecto do meu programa:

Vincular imagens a um produto/cliente.

Estou implementando um sistema web onde eu posso cadastrar fornecedores/prestadores, nele também faço controle de instalação de equipamentos/rastreadores relacionados um cliente. 
Até aí tudo relativamente bem, porém o que eu preciso é vincular uma ou mais imagem um determinado cliente. Pesquisei e encontrei diversos tutoriais onde a maioria deles ensinam como fazer isso com apenas uma e somente uma imagem. Mas eu preciso poder vincular muitas imagens a um único cliente e muitas imagens a outro cliente e a outro e a outro etc. sinceramente eu não entendi como fazer isso e depois visualizar no meu front as imagens relacionadas. Será que consegue me ajudar por favor? vou enviar meu codigo https://github.com/Aleleonel/login.
--
Alexandre L. de Oliveira
(11) 97151-2237

Vitor Hugo Campos

unread,
Dec 9, 2020, 9:56:12 PM12/9/20
to Django Brasil
Você pode criar um model específico pra armazenar as imagens e vincula cada registro a um cliente com uma FK.

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/django-brasil/CAGjOVMa4_xtzA%3DoV7dzwoBmW9F2DoBJ0JXuupV7oge6HY1wv0Q%40mail.gmail.com.


--
Vitor Hugo Campos

Luciano Martins

unread,
Dec 10, 2020, 4:35:09 AM12/10/20
to Django Brasil
vc precisa procurar por inlineformset q basicamente vincula um ID há várias imagens.

Alexandre Leonel

unread,
Dec 11, 2020, 10:38:39 AM12/11/20
to django...@googlegroups.com
Sim, sim eu até já encontrei alguns tutoriais, mas ainda esta confunso para mim. Não to conseguindo trazer as imagens relacionadas no meu template tipo determinada pessoa/cliente trazer todas as imagens relacionada a ela.
# cadastro de imagens e intalação
def imagens_cadastro(request):
template_name = 'instalacao/instalacao_imagens.html'

if request.method == "POST":
form = InstalacaoForm(request.POST, request.FILES)
if form.is_valid():
try:
form.save()
obj = form.instance
context = {
'obj': obj,
}
return render(request, template_name, context)

except:
pass

else:
form = InstalacaoForm()
img = InstalacaoImage.objects.all()
context = {
'form': form,
'img': img
}
return render(request, template_name, context)
from datetime import datetime

from django.db import models
from django.urls import reverse_lazy

from instaladores.models import Instaladores

import uuid
import os


# customização do nome do arquivo
def get_file_path(instance, filename):
ext = filename.split("."[-1])
filename = "%s.%s" % (uuid.uuid4(), ext)

return os.path.join("photos_vistoria", filename)


class Instalacao(models.Model):

INSTALADO_CHOICES = (
('NÃO', 'NÃO'),
('SIM', 'SIM'),
('PENDENTE', 'PENDENTE'),
)
VISTORIA_CHOICES = (
('NÃO', 'NÃO'),
('SIM', 'SIM')
)

placa = models.CharField('Placa', max_length=7, null=False, blank=False, unique=True)
nome = models.CharField('Associado', max_length=30, null=False, blank=False)
endereco = models.CharField('Endereço', max_length=60, null=False, blank=False)
tel01 = models.CharField('Cellular', max_length=60, null=False, blank=False)
tel02 = models.CharField('Residencial', max_length=60, null=True, blank=True)
vendedor = models.CharField('Vendedor', max_length=30, null=False, blank=False, unique=True)
instalador = models.ForeignKey(Instaladores, on_delete=models.SET_NULL, null=True, default='Não especificado')
data_pedido = models.DateTimeField(default=datetime.now, blank=True)
instalado = models.CharField(
'instalado', max_length=8,
null=True, choices=INSTALADO_CHOICES,
default=INSTALADO_CHOICES[0][0]
)
vistoria = models.CharField(
'Vistoria', max_length=3,
null=True, choices=VISTORIA_CHOICES,
default=VISTORIA_CHOICES[0][0]
)
obs = models.TextField(max_length=300, null=True, blank=True)
image = models.FileField(blank=True)

class Meta:
db_table = 'instalacao'
ordering = ["-data_pedido"]

def __str__(self):
return self.nome

def get_absolute_url(self):
return reverse_lazy('instalacao:instalacao_detail', kwargs={'pk': self.pk})


class InstalacaoImage(models.Model):
instalacao = models.ForeignKey(Instalacao, default=None, on_delete=models.CASCADE)
images = models.FileField(upload_to=get_file_path)

def __str__(self):
return self.post.title
from django.contrib import admin
from .models import Instalacao, InstalacaoImage


class InstalacaoImageAdmin(admin.StackedInline):
model = InstalacaoImage


@admin.register(Instalacao)
class InstalacaoAdmin(admin.ModelAdmin):
inlines = [InstalacaoImageAdmin]

class Meta:
model = Instalacao


@admin.register(InstalacaoImage)
class InstalacaoImageAdmin(admin.ModelAdmin):
pass
from django import forms
from django.forms.widgets import ClearableFileInput
from .models import Instalacao


class InstalacaoForm(forms.ModelForm):
# foto = forms.ImageField(widget=ClearableFileInput)

class Meta:
model = Instalacao
fields = '__all__'

Luciano Martins

unread,
Dec 11, 2020, 3:30:52 PM12/11/20
to Django Brasil
Leve sua dúvida para o telegram:  Django Brasil e coloque lá q tem um brow chamado Walisson Felipe que vai de explicar direitinho o q fzr.

Alexandre Leonel

unread,
Dec 13, 2020, 3:31:48 PM12/13/20
to django...@googlegroups.com
Obrigado Luciano farei isso

Pedro Victor

unread,
Dec 16, 2020, 11:22:22 PM12/16/20
to Django Brasil
Eae man! Cara primeiramente você demorou tempo demais para começar a praticar.

Eu não sei se é a melhor coisa a ser feita, entretanto, eu criaria uma classe Images. Ela se associaria com a classe que você deseja colocar as imagens.

class Images(models.Model):
       book = models.ForeignKey(Client, on_delete=models.CASCADE)

Dessa forma você poderia vincular várias imagens a um usuário. E para fazer a adição das imagens no painel admin:


Eu não sei se é a melhor resposta, pois tenho apenas algumas semanas mexendo com Django, mas penso que já é um começo 

Alexandre Leonel

unread,
Dec 17, 2020, 7:54:51 AM12/17/20
to django...@googlegroups.com
kkkk  Eu disse que é meu primeiro projeto não minha primeira prática, ta la meu github que não me deixa mentir.

Mas vamos lá, eu fiz isso, criei uma classe imagem e associei a ela uma foreignKey até relacionei um nome, tbm usei o admin para gerenciar as imagens utilezei  inlineformset  e ta tudo belo, o que eu não to conseguindo é mostrar no meu front, tipo quando eu chamo no nome template {{Client.book}} não ta trazendo nada. Na hora de salvar meu form me parece não estar relacinando.

agradeço sua ajuda

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages