Django: Сделать элементы в поле ManyToMany недоступными после его «использования»? - PullRequest
0 голосов
/ 02 августа 2010

если это мой models.py:

class Category(models.Model):
    name = models.CharField(max_length=500)

    slug = models.SlugField(unique=True)

    def __unicode__(self):
        return self.name            

    def get_absolute_url(self):
        return "%s" % self.slug 


class Item(models.Model):
    name = models.CharField(max_length=500)

    slug = models.SlugField(unique=True)

    category = models.ManyToManyField(Category)     

    def __unicode__(self):
        return self.name            

    def get_absolute_url(self):
        return "%s" % self.slug 

Моя желаемая функциональность - иметь любую категорию , в которой уже есть элемент присвоено ему, чтобы быть недоступным для других предметов .Например, если у меня есть эти Категории : {Животное, Овощ, Минерал}, и я назначаю Предмет"Камень" для Категория"Минерал"когда я добавлю следующий Item , «Минерал» будет недоступен из списка в админке.Надеюсь, это имеет смысл, и спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 02 августа 2010

Если вы хотите, чтобы каждая категория была связана с одним элементом, то у вас вообще нет отношения ManyToMany.Вы должны реструктурировать свои модели, чтобы сделать их ForeignKey из категории в элемент.

0 голосов
/ 02 августа 2010

Вы можете указать «доступное» поле, что-то вроде этого.А затем просто покажите «доступные» пользователю.

class Category(models.Model):
    name = models.CharField(max_length=500)
    slug = models.SlugField(unique=True)
    available = models.BooleanField(default=True)

    def __unicode__(self):
        return self.name            

    def get_absolute_url(self):
        return "%s" % self.slug 

    def save(self, force_insert=False, force_update=False, using=None):
        if self.item_set.all():
            self.available = False
        super(Category, self).save()
...