2016-09-19 59 views
0

我认为显示代码比解释要容易得多。Django:如何创建在Shell中具有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, 
    ) 
) 

但它不起作用。任何想法?

我能想到的是将ManyToManyFieldProduct改为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) 
相关问题