Python 具有动态域和多关系的Django形式

Python 具有动态域和多关系的Django形式,python,django,forms,Python,Django,Forms,我是Django的初学者,已经被这个问题困扰了好几个星期了 考虑以下模型 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.ManyToMa

我是Django的初学者,已经被这个问题困扰了好几个星期了

考虑以下模型

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
我希望用户能够上传照片到与他的模型。我希望能够验证

  • 用户至少上传了一个图像,并将图像的最大数量限制为某个数量

  • 基本上对标签也这样做。但是对于标记,我还希望Django检查标记是否已经存在,如果已经存在,则将其添加到模型中

  • 让用户按下“添加标签/添加图像”按钮,弹出一个新字段

  • 到目前为止我遇到的问题

  • 我需要先保存一个模型,然后才能添加多对多关系。这有点烦人,因为如果中途发生错误,可能会保存一半模型,而另一半模型无效

  • 我知道我可以使用js向DOM添加额外的字段,但是我不知道如何在View函数中处理这些字段


  • 对于问题1,这是有意义的,因为如果您创建了一个被其他模型引用的模型,那么该模型键必须存在。我建议你做的是调查一下

    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);
        }
      });
    }
    
    URL.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")
    

    就像我说的,我知道如何向DOM中添加字段,但不知道如何在view函数中处理字段。谢谢你的示例。我只是想知道我是否也可以使用这种方法提交文件?是的,您可以使用这种方法处理文件上载。但是,我建议您查看jqueryfileupload插件和