2016-07-14 5 views
1

Avec Django, je peux utiliser le OneToOneField comme celui-ci pour créer une relation:Obtenez le site_id courant lorsque vous utilisez un modèle Django

user = models.OneToOneField('auth.User') 

Comment puis-je faire un modèle (exemple ci-dessous) qui transmettrait l'site_id actuelle en essayant de télécharger une image:

class Image(models.Model): 
    site = # something here 
    user = models.OneToOneField('auth.User') 
    image = models.ImageField(upload_to='headers') 
    image_thumbnail = ImageSpecField(source='image', processors=[ResizeToFit(1920)], format='JPEG', options={'quality': 90}) 
    image_admin_thumb = ImageSpecField(source='image', processors=[ResizeToFit(300)], format='JPEG', options={'quality': 80}) 
    name = models.CharField(max_length=50) 
    date = models.DateTimeField(auto_now=True) 
+0

Quel est le "id actuel du site"? qu'est-ce que vous essayez d'accomplir? – Sayse

+0

@Sayse l'ID du site actuel correspond au site auquel l'utilisateur est connecté. L'utilisateur télécharge ensuite une image "à travers" ce site et le site serait cet identifiant courant. J'utilise le CMS Mezzanine pour Django. – l2310p

Répondre

2

Vous pouvez faire l'une des 2 choses:

  1. Vous pouvez utiliser le get_current_site sho rtcut, mais cela nécessiterait l'objet request
  2. Vous pouvez obtenir l'objet Site à partir de settings.SITE_ID - cela nécessiterait toutefois une recherche supplémentaire.

Pour le second cas, l'utilisation serait quelque chose comme ceci:

from django.contrib.sites.models import Site 
from django.conf import settings 

def set_current_site(): 
    return Site.objects.get(pk=settings.SITE_ID) 

et dans les modèles:

site = models.ForeignKey(Site, default=set_current_site) 
+0

J'ai eu l'erreur en essayant de migrer: 'TypeError: l'argument int() doit être une chaîne, un objet semblable à un octet ou un nombre, pas 'Site'' – l2310p

+0

qu'est-ce que' settings.SITE_ID' est réglé à? – karthikr

+0

Il est réglé sur 1. – l2310p