2010-01-21 4 views
1

У меня есть модель под названием Card, которая имеет отношение ManyToMany к тегу . Когда я сохраняю Карту, я хотел бы также создать Продукт, который должен иметь те же отношения ManyToMany для тега.Сохранить метод manytomany

Как получить доступ к тегам экземпляра? self.tags.all() дает пустой список , в то время как если я проверю после сохранения, у карты действительно есть теги. Мой код приведен ниже. Для записи я использую Django 1.0.5.

class Card(models.Model): 
    product  = models.ForeignKey(Product, editable=False, null=True) 
    name  = models.CharField('name', max_length=50, unique=True, help_text='A short and unique name or title of the object.') 
    identifier = models.SlugField('identifier', unique=True, help_text='A unique identifier constructed from the name of the object. Only change this if you know what it does.', db_index=True) 
    tags  = models.ManyToManyField(Tag, verbose_name='tags', db_index=True) 
    price  = models.DecimalField('price', max_digits=15, decimal_places=2, db_index=True) 
    def add_product(self): 
     product = Product( 
      name = self.name, 
      identifier = self.identifier, 
      price = self.price 
     ) 
     product.save() 
     return product 
    def save(self, *args, **kwargs): 
     # Step 1: Create product 
     if not self.id: 
      self.product = self.add_product() 
     # Step 2: Create Card 
     super(Card, self).save(*args, **kwargs) 
     # Step 3: Copy cards many to many to product 
     # How do I do this? 
     print self.tags.all() # gives an empty list?? 

ответ

0

Вы не добавили никаких тегов к карте. Вы не можете добавлять отношения ManyToMany, пока не сохраните Карту, и нет времени между вызовом save и вызовом self.tags.all() для их установки.

2

Вы используете django-admin для сохранения модели и тегов? Поля «многие-ко-многим» не сохраняются там до тех пор, пока не появится сигнал после сохранения модели. В этом случае вы можете использовать метод save_model класса admin. Например:

class CardAdmin(admin.ModelAdmin): 

    def save_model(self, request, obj, form, change): 
     obj.save() 
     form.save_m2m() 
     #from this point on the tags are accessible 
     print obj.tags.all() 
Смежные вопросы