Как я могу получить текстовое поле вместо <select>ввода для отношения ManyToManyField? - PullRequest
0 голосов
/ 16 февраля 2012

Это отношение модели:

class Tag(models.Model):
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=500, null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now_add=True)

class Post(models.Model):
    user = models.ForeignKey(User)
    tagfield = models.ManyToManyField(Tag)
    title = models.CharField(max_length=100)
    content = models.TextField()
    created = models.DateTimeField(default=datetime.datetime.now)
    modified = models.DateTimeField(default=datetime.datetime.now)

    def __unicode__(self):
        return '%s,%s' % (self.title,self.content)


class PostModelForm(forms.ModelForm):
    class Meta:
        model = Post


class PostModelFormNormalUser(forms.ModelForm):
    class Meta:
        model = Post
        exclude = ('user', 'created', 'modified')

в views.py:

        form = PostModelFormNormalUser()
        context = {'form':form}
        return render_to_response('addpost.html', context, context_instance=RequestContext(request))

в add.html: `{{form.as_p}}

Заголовок, содержимое и выбранный ввод отображаются на веб-странице.

<p><label for="id_tagfield">Tagfield:</label> <select multiple="multiple" name="tagfield" id="id_tagfield">
</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></p>

Как получить текстовое поле вместо ввода для name = models.CharField(max_length=100).

Tag.name будет разделено строкойпространства.Мне нужно, чтобы «заголовок, контент, тэг» отображались на веб-странице.

1 Ответ

0 голосов
/ 16 февраля 2012

См. https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-field-types-or-widgets

Вы захотите что-то вроде этого:

class PostModelFormNormalUser(forms.ModelForm):
    class Meta:
        model = Post
        exclude = ('user', 'created', 'modified')
        widgets = {
            'tagfield': Textinput(),
        }

Тогда вам нужно самостоятельно обработать данные POST в представлении.

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