Сохраните метод мантоманы - PullRequest
1 голос
/ 21 января 2010

У меня есть модель Card, которая имеет отношение 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?? 

Ответы [ 2 ]

2 голосов
/ 21 января 2010

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

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()
0 голосов
/ 21 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...