2013-02-15 5 views
0

Я пытаюсь создать представление с форм-формой для модели «Ссылка». Проблема в том, что в каждой форме я хотел бы, чтобы пользователь имел возможность не просто выбирать из уже созданных объектов TargetLink, но и редактировать их inline.Django: создание связей M2M inline

class ClientUrl(models.Model): 
    client = models.ForeignKey(UpstreamClientModel, null=True) 
    url = models.URLField(unique=True, null=False) 
    active = models.BooleanField(default=True) 

    def __unicode__(self): 
     return self.url 

    class Meta: 
     verbose_name = 'url' 
     ordering = ['url'] 

KEYWORD_TYPES = (
    ('PN', 'Pending'), 
    ('MN', 'Money'), 
    ('BR', 'Brand'), 
    ('LT', 'Long Tail'), 
) 

class ClientKeyword(models.Model): 
    client = models.ForeignKey(UpstreamClientModel, null=True) 
    kw_type = models.CharField('keyword type', max_length=2, 
       choices=KEYWORD_TYPES, default='LT') 
    keyword = models.CharField(max_length=150, unique=False) 
    directions = models.CharField(max_length=200, blank=True, 
      help_text='e.g: 25 chars, use "affordable rental cars"') 

    def __unicode__(self): 
     return self.keyword 

    class Meta: 
     ordering = ['keyword', ] 
     unique_together = ('client', 'keyword') 

class TargetLink(models.Model): 
    keyword = models.ForeignKey(ClientKeyword, related_name='target_links') 
    url = models.ForeignKey(ClientUrl, related_name='target_links') 

    def __unicode__(self): 
     return '{0}:{1}'.format(self.keyword, self.url) 

class Link(models.Model): 
    client = models.ForeignKey(UpstreamClientModel, related_name='links') 
    target = models.ForeignKey(Target, related_name='links') 
    user = models.ForeignKey(User, blank=True, null=True, related_name='links') 
    link_type = models.ForeignKey(LinkType, related_name='links') 
    site = models.ForeignKey(Site, blank=True, null=True, 
       related_name='links') 
    site_url = models.URLField(blank=True, 
      help_text='leave blank until url is live') 
    month = models.DateField(blank=True, null=True) 
    target_links = models.ManyToManyField(TargetLink, related_name='links') 

Как я мог это сделать?

ответ

0

Один из способов может заключаться в том, чтобы иметь форму, которая находится за пределами вашего набора форм для TargetLinks, и использовать Knockout.js или другую среду на стороне клиента, чтобы нажимать обновленные варианты для TargetLinks в поле target_links в наборах форм.

+0

Да, проблема в том, что оба поля в TargetLink также связаны с двумя другими моделями, так как бы я мог обработать создание этих объектов? –

+0

Взгляните на: http://knockoutjs.com/examples/cartEditor.html Это может дать вам пример того, куда я направляюсь. Нокаутом (и другими библиотеками) очень легко подталкивать состояние к пользовательскому интерфейсу при изменении модели, что позволит вам менять выбор в своем наборе форм «на лету». – Brandon