Джанго много ко многим ассоциация - PullRequest
2 голосов
/ 10 ноября 2011

Как мне создать ассоциацию в MyListAssoc отсюда?Как бы это удалить?

class Group(models.Model):
    name = models.CharField(max_length=32, unique=True)
    def __unicode__(self):
        return '%s %s' % (self.name)

class MyKeywords(models.Model):
    name = models.CharField(max_length=32, unique=True)
    def __unicode__(self):
        return self.name

class MyListAssoc(models.Model):    
    group = models.ForeignKey(Group)
    keyword = models.ManyToManyField(MyKeywords)

mygroup = Group.objects.get(name="mygroup")
mykeyword = MyKeywords.objects.create(name="mykeyword")

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Вам просто нужно отношение многие ко многим, что-то вроде:

class Group(models.Model):
    name = models.CharField(max_length=32, unique=True)
    keywords = models.ManyToManyField(MyKeywords)

    def __unicode__(self):
        return '%s' % (self.name)

class MyKeywords(models.Model):
    name = models.CharField(max_length=32, unique=True)

    def __unicode__(self):
            return self.name

Затем вы можете использовать свое отношение m2m:

group = Group.objects.get(name='something')
keyw = MyKeywords.objects.get(name='something_else')
group.keywords.add(keyw)
group.keywords.all()
group.keywords.remove(keyw)

NOTE :Рекомендуется, чтобы имя класса было в единственном числе, поэтому оно должно быть MyKeyword вместо MyKeywords

2 голосов
/ 10 ноября 2011
mygroup = Group.objects.get(name="mygroup")
mykeyword = MyKeywords.objects.create(name="mykeyword")

mylistassoc = MyListAssoc(group=mygroup)
mylistassoc.save()
mylistassoc.keyword.add(mykeyword) 

Если вы хотите удалить связь, просто используйте remove(mykeyword) вместо add(mykeyword).

Однако вам не нужна модель-посредник, чтобы установить связь между группами и ключевыми словами.

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