2011-10-20 9 views
19
In [1]: from editor.models import * 
In [4]: from subscriptions.models import * 
In [5]: template = StockTemplate.objects.create(name='Template 1') 
In [6]: template 
Out[6]: <StockTemplate: Template 1> 
In [7]: plan = SubscriptionPlan.objects.create(name='Bronze') 
In [8]: plan 
Out[8]: <SubscriptionPlan: Bronze> 
In [12]: plan.templates.add(template) 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 

/home/me/GitProjects/test_git/proj/<ipython console> in <module>() 

/home/me/GitProjects/test_git/django-trunk/django/db/models/fields/related.pyc in add(self, *objs) 
    498   if rel.through._meta.auto_created: 
    499    def add(self, *objs): 
--> 500     self._add_items(self.source_field_name, self.target_field_name, *objs) 
    501 
    502     # If this is a symmetrical m2m relation to self, add the mirror entry in the m2m table 


/home/me/GitProjects/test_git/django-trunk/django/db/models/fields/related.pyc in _add_items(self, source_field_name, target_field_name, *objs) 
    558       if not router.allow_relation(obj, self.instance): 
    559       raise ValueError('Cannot add "%r": instance is on database "%s", value is on database "%s"' % 
--> 560            (obj, self.instance._state.db, obj._state.db)) 
    561       new_ids.add(obj.pk) 
    562      elif isinstance(obj, Model): 

ValueError: Cannot add "<StockTemplate: Template 1>": instance is on database "default", value is on database "None" 

ModelosValueError: No se puede añadir *: instancia se encuentra en la base de datos "por defecto", el valor está en la base de datos "Ninguno"

6 class SubscriptionPlan(models.Model): 
    7  name = models.CharField(max_length=255) 
    8  templates = models.ManyToManyField(StockTemplate) 
    9  monthly_fee = models.IntegerField("Monthly Fee", max_length=16, default="0") 
10  modified = models.DateTimeField(auto_now=True, editable=False) 
11  created = models.DateTimeField(auto_now_add=True, editable=False) 
12 
13  def __unicode__(self): 
14   return "%s" % self.name 



18 class StockTemplate(IKImage): 
19  name = models.TextField() 
20  description = models.TextField(blank=True) 
21 
22  is_public = models.BooleanField(default=True) 
23 
24  html = models.FileField(upload_to='stock_templates/html/', \ 
25        help_text='The file that will be used to render.') 
26  #css = models.FileField(upload_to='stock_templates/css/', blank=True) 
27 
28  img = models.ImageField(upload_to='stock_templates/img/') 
29 
30  modified = models.DateTimeField(auto_now=True) 
31  created = models.DateTimeField(auto_now_add=True) 
32 
33  objects = StockTemplateManager() 
34 
35  class IKOptions: 
36   spec_module = 'editor.specs' 
37   cache_dir = 'stock_templates/img/specs/' 
38   image_field = 'img' 
39 
40  def __unicode__(self): 
41   return u"%s" % self.name 
42 
43  def get_absolute_url(self): 
44   return reverse('preview_stock', args=[self.id]) 

¿Tiene algo que ver con el hecho de que StockTemplate es un IKImage ¿objeto?

Respuesta

43

El problema aquí es que usted necesita llamar al método Save para ambos objetos antes de añadir:

template.save() 
plan.save() 
plan.templates.add(template) 

Django no puede añadir una plantilla de un plan si ninguna de que los objetos no tiene un ID de

Cuestiones relacionadas