0
1

Hola buenas

Soy nuevo en esto de django y python y tengo algunas dudas que no se como solucionarlas ni encuentro información para poder seguir adelante.

Estoy realizando un formulario donde el usuario sin tener que validarse puede poner su nombre y apellidos, dirección de correo electrónico y adjuntar mínimo una imagen y máximo 5, he hecho varias versiones del código y sigo sin poder avanzar,

Desde la parte administrativa tengo que poder gestionar las imágenes y darles una nota (3 admins pueden votar y modificar las imágenes)

Cuando tenia el código con imagen1, imagen2.....imagen5 me dejaba hacer todo pero como solo es obligada 1 en la parte de administración me daban problemas la 2,3,4 y 5 a parte de cuando le daba a acciones, el desplegable me salia como objeto, no el usuario, o la imagen, salia object sin identificar, tengo que saber de quien es cada imagen...

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# models.py

from django.db import models

class Concursants(models.Model):
    id_concursant = models.AutoField(primary_key=True)
    data = models.DateField(auto_now=True)
    nom = models.CharField(max_length=30, verbose_name="Nom")
    cognom1 = models.CharField(max_length=40, verbose_name="Primer Cognom")
    cognom2 = models.CharField(max_length=40, verbose_name="Segon Cognom")
    correu = models.EmailField(verbose_name=u"Correu electrònic", help_text=('Exemple: nom@domini.com'))

    def _unicode_(self):
        return '%s %s %s' % (self.nom, self.cognom1, self.cognom2)

    class Meta:
        ordering = ['cognom1']

class Imatge(models.Model):
    id_imatge = models.AutoField(primary_key=True)
    concursant = models.ForeignKey(Concursants)
    nom_imatge = models.CharField(max_length=50, verbose_name=u"Títol de la imatge")
    imatge = models.ImageField(upload_to='images/photos/2011', verbose_name="Adjunta la imatge", help_text=(u'Format vàlid jpg'))

    def _unicode_(self):
        return '%s' % (self.nom_imatge)

class Nota(models.Model):
    id_nota = models.AutoField(primary_key=True)
    imatge = models.ForeignKey(Imatge)
    nota1 = models.PositiveSmallIntegerField(blank=True, verbose_name=u"Puntuació de la imatge, nº enter sense decimals")
    nota2 = models.PositiveSmallIntegerField(blank=True, verbose_name=u"Puntuació de la imatge, nº enter sense decimals")
    nota3 = models.PositiveSmallIntegerField(blank=True, verbose_name=u"Puntuació de la imatge, nº enter sense decimals")

    def _unicode_(self):
        return '%s %s %s' % (self.nota1, self.nota2, self.nota3)

    class Meta:
        ordering = ['nota1']`

# admin.py

from django.contrib import admin
from participants.models import Concursants
from participants.models import Imatge
from participants.models import Nota

class AdminConcursants(admin.ModelAdmin):
    list_display = ('nom', 'cognom1', 'cognom2', 'correu')
    list_filter    = ('cognom1', 'cognom2')
    ordering = ('cognom1',)
    search_fields  = ('nom', 'cognom1', 'cognom2',)

admin.site.register(Concursants, AdminConcursants)

class Imatge(admin.TabularInline):
    model = Imatge
    extra = 5

class AdminImatges(admin.ModelAdmin):
    inlines = [Imatge,]

admin.site.register(Imatge, AdminImatges)

class AdminNotes(admin.ModelAdmin):
    list_display = ('imatge', 'nota1', 'nota2', 'nota3')
    ordering = ('nota1',)
    search_fields  = ('nom_imatge',)

admin.site.register(Nota, AdminNotes)

No se si el problema es de que me faltan librerias para importar o qual es, ahora al ejecutar el código no entra en la parte administrativa, me dice que...

1
2
3
4
Exception Type:     ImportError
Exception Value:

cannot import name GenericTabularInline

y si le pongo la libreria que este error me ha salido ahora, me dice que no es iterable,

Puede ser que con ImageField no se pueda hacer iteraciones del tipo

1
2
3
    class Imatge(admin.TabularInline):
    model = Imatge
    extra = 5

Muchas gracias de antemano, sigo sin encontrar una solución

1
Exception Value:

'type' object is not iterable

Esta pregunta está marcada como "wiki comunitario".

preguntado 28 Jul '11, 15:26

nemessis's gravatar image

nemessis
1123
Aceptadas: 0%

editó 28 Jul '11, 21:48

He corregido los bloques de código, estaban mal formateados.

(28 Jul '11, 15:41) haplo

Otra cosa, nemessis, usa 4 espacios para indentar el código python. Tal y como lo tenías puesto parece que usas 2, corrígelo lo antes posible.

(28 Jul '11, 15:43) haplo

Junto con el error que te sale debe decir dónde, en qué fichero y en qué línea. Pon esa información.

(28 Jul '11, 22:02) haplo

Puede que meta la pata, pero creo que los Admin Inlines de django son FormSets, y por lo tanto no son iterables salvo en la versión 1.3 de django, que han solucionado el problema.

(29 Jul '11, 11:27) oscarcp

Estás redefiniendo la clase Imatge en admin.py. Cambiále el nombre, por ejemplo a ImatgeInline.

enlace permanente

respondido 29 Jul '11, 11:11

chemacortes's gravatar image

chemacortes
3.3k34047
Aceptadas: 58%

Muchas gracias por la ayuda!!

Ya lo solucioné con lo que me dijeron

Muchas gracias de nuevo

EDITO: Me surgio otro problema...

(25 Ago '11, 20:00) nemessis

Después de solucionar el tema del admin gracias a ustedes, intento validar el formulario, tengo problemas con el view.py no me guarda las imágenes en la base de datos y salta un error, los usuarios si los guarda porque desde la parte administrativa los veo.

Lo que intento hacer es un formulario donde el usuario pueda poner sus datos y adjuntar de 1 a 5 imágenes

Muchas gracias de antemano

El view.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def gestio_concursants(request):
    if request.method == 'POST':
    concursant_form = ConcursantForm(request.POST)
    imatge_form = ImatgeForm(request.POST, request.FILES)
        captcha_form = CaptchaTestModelForm(request.POST)
        if concursant_form.is_valid() and imatge_form.is_valid() and captcha_form.is_valid():
        nom = concursant_form.cleaned_data['nom'],
        cognom1 = concursant_form.cleaned_data['cognom1'],
        cognom2 = concursant_form.cleaned_data['cognom2'],
        correu = concursant_form.cleaned_data['correu'],
        nom_imatge = imatge_form.cleaned_data['nom_imatge'],
        imatge = imatge_form.cleaned_data['imatge'],
        concursant_form.save()
        imatge_form.save()
        captcha_form.save()
            human = True
        return HttpResponseRedirect('/gracies/')

    else:
    concursant_form = ConcursantForm()
    imatge_form = ImatgeForm()
        captcha_form = CaptchaTestModelForm()

    return render_to_response('formulari.html', {'concursant_form': concursant_form, 'imatge_form': imatge_form, 'captcha_form': captcha_form})

El error

IntegrityError at /formulari/

el valor null para la columna «concursant_id» viola la restricción not null

Request Method: POST Request URL: http://fotomath/formulari/ Django Version: 1.2.5 Exception Type: IntegrityError Exception Value:

el valor null para la columna «concursant_id» viola la restricción not null

Exception Location: /usr/lib/pymodules/python2.7/django/db/backends/postgresql_psycopg2/base.py in execute, line 44 Python Executable: /usr/bin/python Python Version: 2.7.1

Lo he revisado y si guarda las imagenes en la base de datos, almenos en el archivo donde le digo que las guarde pero desde la parte administrativa no se ven las imagenes y justo despues de enviar el formulario salta el error descrito arriba, alguien sabe que puede ser?

enlace permanente

respondido 25 Ago '11, 20:19

nemessis's gravatar image

nemessis
1123
Aceptadas: 0%

editó 26 Ago '11, 17:54

1

Antes de nada, indicarte que deberías haber abierto una nueva pregunta, aunque sea una continuación de la pregunta anterior. Así va a quedar como si estuvieras respondiendote a tí mismo.

Para responderte mejor, necesitaría ver el código de los formularios, sobre todo de ConcursantForm que es el que parece dar problemas.

Aún así puedo darte alguna orientación: falla al guardar concursant, no la imatge. Concretamente, dice que falla con la clave principal, que es "autonumérica". En postgres, ésto se hace asociando una secuencia con la tabla, que parece que es lo que falla. Yo diría que no tienes bien sincronizado el modelo con la base de datos.

(29 Ago '11, 09:48) chemacortes

Hola, muchas gracias por el apunte, solucionado el problema, si estaba en el formulario

THX!!!!

(03 Sep '11, 12:14) nemessis
Tu respuesta
Activar/desactivar vista previa

Seguir esta pregunta

Por Email:

Una vez que entres podrás suscribirte desde aquí para recibir actualizaciones

Por RSS:

Respuestas

Respuestas y Comentarios

Trucos del editor

  • *italic* or __italic__
  • **negrita** o __negrita__
  • enlace:
    [texto](http://url.com/ "Pregunta")
  • imagen:
    ![alt texto](/path/img.jpg "Pregunta")
  • lista numerada:
    1. Foo
    2. Bar
  • Código:
    • Dentro de un parrafo:
      `codigo`
    • Fragmento de código:
      Selecciona el texto y usa el botón del icono de ceros y unos
  • Resaltado de sintaxis:
    Hay dos maneras de hacerlo:
    • La 1ª línea es un Shebang #!/usr/bin/env python
    • La 1ª línea es un lexer
      :::python

      Algunos lexer validos:
      :::python
      :::django
      :::css+django
      :::html+django
      :::console
      :::pycon
  • Para añadir un salto de línea simplemente deja una línea en blanco entre parrafos
  • se permite código HTML básico

Etiquetas de la pregunta:

×174
×77

pregunta realizada: 28 Jul '11, 15:26

pregunta vista: 1,158 veces

última modificación: 06 Sep '11, 00:34