Прямое назначение передней стороне множества «многие ко многим» запрещено - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь написать скрипт, который будет заполнять базу данных из файла json. Это выглядит так:

class Command(BaseCommand):
    def handle(self, *args, **options):
        categories = load_from_json('categories')

        ProductCategory.objects.all().delete()
        for category in categories:
            new_category = ProductCategory(**category)
            new_category.save()

        restaurants = load_from_json('restaurants')

        Restaurant.objects.all().delete()
        for restaurant in restaurants:
            category_name = restaurant['category']
            _category = ProductCategory.objects.get(name=category_name)
            restaurant['category'] = _category
            new_restaurant = Restaurant(**restaurant)
            new_restaurant.save()

Когда я запускаю его, django выдает ошибку: прямое назначение передней стороне множества «многие ко многим» запрещено. Вместо этого используйте category.set (). Мои модели выглядят так:

class ProductCategory(models.Model):
    name = models.CharField(verbose_name='наименование категории', max_length=64, unique=True)
    image = models.ImageField(upload_to='category_images', blank=True)
    description = models.TextField(verbose_name='описание категории', blank=True)

    def __str__(self):
        return self.name


class Restaurant(models.Model):
    name = models.CharField(verbose_name='наименование ресторана', max_length=64, unique=True)
    description = models.TextField(verbose_name='описание категории', blank=True)
    image = models.ImageField(upload_to='restaurant_images', blank=True)
    category = models.ManyToManyField(ProductCategory)

    def __str__(self):
        return self.name

Похоже, многие сталкивались с этой проблемой, но я изо всех сил пытаюсь найти решение этой проблемы.

...