2016-09-19 2 views
0

Я думаю, что показ кода намного проще, чем объяснение.Django: Как создать объект, который имеет ManyToManyField в оболочке?

models.py

class Product(TimeStampedModel): 
    name = models.CharField(max_length=120, unique=True) 
    slug = models.SlugField(null=True, blank=True) 
    description = models.TextField(max_length=400, blank=True) 
    is_active = models.BooleanField(default=True) 
    place_category = models.ForeignKey(
     "PlaceCategory", 
     related_name="products_by_place", # category.products_by_place.all() 
    ) 
    subject_category_set = models.ManyToManyField(
     "SubjectCategory", 
     related_name="products_by_subject", # category.products_by_subject.all() 
    ) 

    objects = ProductManager() 

    class Meta: 
     ordering = ('-created',) 

    def __str__(self): 
     return self.name 

    def get_absolute_url(self): 
     return reverse(
      "products:product_detail", 
      kwargs={ 
       "slug": self.slug, 
      } 
     ) 



class Category(TimeStampedModel): 
    name = models.CharField(max_length=25, unique=True) 
    is_active = models.BooleanField(default=True) 

    class Meta: 
     abstract = True 

    def __str__(self): 
     return self.name 


class PlaceCategory(Category): 

    class Meta: 
     verbose_name = "Place Category" 
     verbose_name_plural = "Place Categories" 


class SubjectCategory(Category): 

    class Meta: 
     verbose_name = "Subject Category" 
     verbose_name_plural = "Subject Categories" 

Это то, что я пытаюсь сделать в скорлупе.

# place category 
self.place_category = PlaceCategory.objects.create(name="학교") 

# subject category 
self.subject_category1 = SubjectCategory.objects.create(name="사람") 
self.subject_category2 = SubjectCategory.objects.create(name="꽃병") 

# product 
self.product = Product.objects.create(
    name="product name1", 
    place_category=self.place_category, 
    subject_category_set=(
     self.subject_category1, 
     self.subject_category2, 
    ) 
) 

Но это не сработает. Есть идеи?

Что я могу думать о перемещении ManyToManyField от Product до SubjectCategory.

Но я хочу знать как в моем коде. Благодарю.

ответ

1

Вам необходимо добавить тему к вашему товару.

Так что это так:

# place category 
self.place_category = PlaceCategory.objects.create(name="학교") 

# subject category 
self.subject_category1 = SubjectCategory.objects.create(name="사람") 
self.subject_category2 = SubjectCategory.objects.create(name="꽃병") 

# product 
self.product = Product.objects.create(
    name="product name1", 
    place_category=self.place_category, 
) 

self.product.subject_category_set.add(self.subject_category1) 
self.product.subject_category_set.add(self.subject_category2) 

или вы можете сделать что-то вроде этого

list_of_subject_categories = [self.subject_category1, self.subject_category2] 

self.product.subject_category_set.add(*list_of_subject_categories) 
Смежные вопросы