簡體   English   中英

Django如何更改表格或views.py?

[英]Django how to change forms or views.py?

我創建一個簡單的頁面,可以在其中添加文章(標題,文本和類別)。 當我在“站點管理”上執行此操作時,一切正常,但是在頁面上添加時,我無法選擇類別。

http://i.stack.imgur.com/4Nxzb.jpg

我選擇類別,例如在此屏幕上,但是保存后我的文章沒有該類別(文章未分類)。

我創建了forms.py文件,我這樣做是這樣的:

class PostForm(forms.ModelForm):

class Meta:
    model = Post
    fields = ('title', 'text', 'categories')

我該如何更改“類別”以使其可用?

models.py:

from django.db import models
from django.utils import timezone

class Category(models.Model):
    name = models.CharField('Nazwa Kategorii', max_length=100)
    slug = models.SlugField('Odnośnik', max_length=100)
    icon = models.ImageField('Ikonka Kategorii', upload_to='icons',
                              blank=True)

    class Meta:
        verbose_name = "Kategoria"
        verbose_name_plural = "Kategorie"

    def __unicode__(self):
        return self.name

class Post(models.Model):
    author = models.CharField(max_length=25, blank=True, null=True)
    title = models.CharField(max_length=200)
    slug = models.SlugField('Odnośnik', max_length=255)
    text = models.TextField()
    published_date = models.DateTimeField(
            default=timezone.now)
    categories = models.ManyToManyField(Category, verbose_name='Kategorie')

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __unicode__(self):
        return self.title

從views.py我的觀點

def post_new(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
            return redirect('blog.views.post_detail', pk=post.pk)
    else:
        form = PostForm()
    return render(request, 'blog/post_edit.html', {'form': form})

使用commit=False保存表單時,應調用表單的save_m2m()方法:

post = form.save(commit=False)
post.author = request.user
post.save()
form.save_m2m()

另一個更優雅的解決方案是將帶有預設字段的instance傳遞給表單的構造函數。 這種情況下,您不需要使用commit=False參數:

form = PostForm(request.POST, instance=Post(author=request.user))
if form.is_valid():
    post = form.save()
    return redirect('blog.views.post_detail', pk=post.pk)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM