Django在输入链接时创建一个对象

时间:2014-08-13 15:57:06

标签: python django django-models django-forms

标题可能没有告诉我的问题,对不起。

我有models.py这样:

class Baslik(models.Model):
    user = models.ForeignKey(User, null=True, blank=True)
    title = models.CharField(max_length=50)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    active = models.BooleanField(default=True)

我有一个向Baslik模型添加对象的功能。我只是输入一个标题,它工作正常。 这是我的forms.py

class BaslikForm(ModelForm):
    class Meta:
        model = Baslik
        fields = ('title',)

我对每个对象的网址都是这样的:url(r'^(?P<title>.*)/$', 'tek', name = "tek_baslik") 我想在用户输入其未来链接时创建一个新对象(如果尚未创建)。例如,当用户输入/baslik/stack时,我想创建一个&#34;堆栈&#34;立即对象并呈现其在views.py中为每个对象定义的页面。 我怎样才能做到这一点。任何想法都会有帮助。感谢。

2 个答案:

答案 0 :(得分:2)

您可以采取以下方法:

1)定义一个新的url结构:

url(r'^baslik/(?P<title>.*)/$', views.baslik_handle, name = "tek_baslik")

2)您不需要modelform,您可以通过视图直接处理它。在views.baslik_handle中使用get_or_create。 e.g。

def baslik_handle(request, title):
   baslik, created = Baslik.objects.get_or_create(title=title)

答案 1 :(得分:1)

ModelForm是不必要的,试试这个:

查看

def create_baslik(request, title):
    context = RequestContext(request)
    context_dict = {}

    baslik, created = Baslik.objects.get_or_create(title=title, user=request.user)
    context_dict['baslik'] = baslik

    return render_to_response('baslik.html', context_dict, context)

<强>模板

{% if baslik %}
    {{ baslik.title }}
    ...
{% endif %}