Várias imagens por modelo

votos
61

Eu estou escrevendo uma listagem de aplicativos imobiliário simples em Django. Cada propriedade tem de ter um número variável de imagens. Imagens precisa ter uma ordem editável. E eu preciso fazer o usuário à prova de administrador.

Então, o que disse, o que são as minhas opções?

  1. Existe um campo de ImageList que eu não sei?

  2. Existe um aplicativo como o django.contrib.commentsque faz o trabalho para mim?

  3. Se eu tiver que escrevê-lo eu mesmo, como eu iria sobre como fazer o lado de administração decente? Eu estou imaginando algo muito mais liso do que o ImageField fornece, com alguma drag'n'drop para re-ordenação. Mas eu sou um clutz completa em escrever páginas de administração = (

Publicado 11/02/2009 em 17:26
fonte usuário
Em outras línguas...                            


3 respostas

votos
101

  1. listas de variáveis, também conhecido como um relacionamento muitos-para-um, são geralmente tratadas, fazendo um modelo separado para os muitos e, nesse modelo, usando um ForeignKey para o "um".

  2. Não há um aplicativo como este em django.contrib, mas existem vários projetos externos que você pode usar, por exemplo, django-photologue que ainda tem algum apoio para visualizar as imagens no admin.

  3. O site de administração não pode ser feita "prova do usuário", ele só deve ser usado por usuários confiáveis. Diante disso, a maneira de fazer o seu site de administração decente seria definir um ModelAdmin para a sua propriedade e, em seguida, in-line fotos ( documentação em linha ).

Assim, para dar-lhe alguns rascunhos rápidos, tudo seria algo parecido com isto:

# models.py
class Property(models.Model):
    address = models.TextField()
    ...

class PropertyImage(models.Model):
    property = models.ForeignKey(Property, related_name='images')
    image = models.ImageField()

e:

# admin.py
class PropertyImageInline(admin.TabularInline):
    model = PropertyImage
    extra = 3

class PropertyAdmin(admin.ModelAdmin):
    inlines = [ PropertyImageInline, ]

admin.site.register(Property, PropertyAdmin)

A razão para usar o argumento related_name sobre o ForeignKey é tão suas consultas será mais legível, por exemplo, neste caso, você pode fazer algo como isto em seu ponto de vista:

property = Property.objects.get(pk=1)
image_list = property.images.all()

EDIT: Esqueci de mencionar, você pode então implementar ordenação drag-and-drop no admin usando trecho de Simon Willison inlines orderable usando arrastar e soltar com jQuery UI

Respondeu 11/02/2009 em 18:52
fonte usuário

votos
5

Escrever um modelo de imagem que tem uma ForeignKey para o seu modelo de propriedade. Muito provavelmente, você terá alguns outros campos que pertencem à imagem e não à propriedade.

Respondeu 11/02/2009 em 17:57
fonte usuário

votos
3

Estou actualmente a fazer sobre a mesma coisa, e eu enfrentado o mesmo problema.

Depois eu pesquisei por um tempo, eu decidi usar django-imaging . Ele tem um bom Ajax recurso, as imagens podem ser carregados na mesma página como a página Inserir modelo, e pode ser editável. A única coisa que está faltando é o suporte para extensão não JPEG. Espero ter a solução para isso há dias. :)

Respondeu 24/06/2009 em 20:51
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more