2013-08-21 30 views
0

我是一個初學者的Django用戶,並已堅持了這個問題星期了。Django的形式動態域和多對多relationschips

考慮下面的模型

class Post(models.Model): 
    title = models.CharField(max_length=65) 
    author = models.ForeignKey(User) 
    date = models.DateField(auto_now_add=True) 
    content = models.TextField() 
    tags = models.ManyToManyField(Tag) 
    images = models.ManyToManyField(Image) 

def __unicode__(self): 
    return self.title 

我希望用戶能夠將照片上傳到他的模型。我希望能夠驗證是否

  1. 用戶至少已上傳一張圖片並將圖片的最大數量限制爲一定數量。

  2. 基本上做同樣的標籤。但有了標籤,我還想讓Django檢查標籤是否已經存在,如果有的話將它添加到模型中。

  3. 讓用戶按下一個按鈕,上面寫着添加標籤/添加圖像,使一個新的領域彈出。

我到目前爲止遇到的問題。

  1. 我需要在保存模型之前添加多對多關係。這有點令人討厭,因爲如果在道路中途發生錯誤,可能有一半的模型被保存而另一個無效。

  2. 我知道我可以使用JS但是我不知道如何處理那些在取景功能額外的字段添加到DOM。

回答

1

對於問題1,這很有意義,因爲如果您創建的模型是由其他模型引用的,則說明模型鍵必須存在。我建議你做的是看看saving multiple models with a transaction

2是很容易的,只需使用jQuery/Javascript來顯示/隱藏基於用戶選擇的事件瀏覽器中的相應字段。

基於您的評論,下面是我如何處理數據,並從服務器

//Submit data to server, assuming you have already extracted out the relevant data values 
$("some_button").click(function(e){ 
    $.ajax({ 
    url : "someUURLLocation/", 
    type : "POST", 
    data : {"data" : JSON.stringify({"field1" : var1, "field2" :var2}), 
    dataType : "json", 
    success : function(results){ 
     if (results.success == "true") { 
     //handle DOM insertion and other stuff 
     } else 
     alert(results.message); 
    } 
    }); 
} 

urls.py一個例子:

from django.conf.urls import patterns, url 
from $APPNAME import views 

urlpatterns = patterns("", 
    ... 
    ... 
    url(r'^someURLLocation/$', views.handleDataSubmission), 
    ... 
) 

views.py:

from django.http import HttpResponse 
from django.utils import simplejson 

def handleDataSubmission(request): 
    data = simplejson.loads(request.POST.get("data", None)) 

    if data is not None: 

    newPost = Post.objects.create(field1 = data["field1"], field2 = data["field2"]) 
    dataReturn = [{"val1" : newPost.title, "val2" : newPost.date}] 

    return HttpResponse(simplejson.dumps({"success" : "true", "data" : dataReturn}), mimetype = "application/json") 

    else: 
    return HttpResponse(simplejson.dumps({"success" : "false", "message" : "Invalid data received by server"}), mimetype = "application/json") 
+0

就像我說過的,我知道如何將字段添加到DOM,而不是如何在視圖函數中處理它們。 – Niels

+0

感謝你的例子。我只是想知道我是否也可以使用這種方法提交文件? – Niels

+0

是的,你可以使用這種方法處理文件上傳。不過,我建議你在http://stackoverflow.com/questions/5871730/need-a-minimal-django-file-upload-example檢查出的jQuery插件文件上傳和信息 – Jason