小编jam*_*ida的帖子

在django中选择DISTINCT个别列?

我很好奇是否有任何方法可以在Django中进行查询而不是SELECT * FROM..."下面的".我正在尝试做一个" SELECT DISTINCT columnName FROM ...".

具体来说,我有一个模型,看起来像:

class ProductOrder(models.Model):
   Product  = models.CharField(max_length=20, promary_key=True)
   Category = models.CharField(max_length=30)
   Rank = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

其中Rank是一个排名Category.我希望能够遍历所有类别,对该类别中的每个等级进行一些操作.

我想首先获得系统中所有类别的列表,然后查询该类别中的所有产品并重复,直到处理完每个类别.

我宁愿避免使用原始SQL,但如果我必须去那里,那就没事了.虽然我以前从来没有在Django/Python中编写原始SQL.

django distinct django-models django-orm django-queryset

80
推荐指数
4
解决办法
11万
查看次数

如何在Django中创建子应用程序?

我是Django的新手,但在编程方面经验丰富.我有一组的,我想组到部分应用程序,但无法弄清楚如何让manage.py为我做这个相关的应用.

理想情况下,我最终会得到如下结构:

project/
   app/
       subapp1/
       subapp2/
Run Code Online (Sandbox Code Playgroud)

我试过manage.py startapp app.subapp1manage.py startapp app/subapp1
,但是这告诉我,/.无效字符的应用程序的名称.

我已经尝试更改到app目录并运行,../manage.py subapp1但这使supapp1处于顶层.注意,我不是要直接制作一个独立的应用程序.我正试图在一个项目中做所有这些.

django

45
推荐指数
5
解决办法
3万
查看次数

为什么Django中的只读表单字段是个坏主意?

我一直在寻找一种创建只读表单字段的方法,我在这个主题上发现的每篇文章都附带一个声明"这是一个坏主意".现在对于单个表单,我可以理解还有其他方法可以解决问题,但在modelformset中使用只读表单字段似乎是一个完全自然的想法.

考虑一个教师成绩簿应用程序,老师希望能够通过一个SUBMIT输入所有学生(注意复数学生)成绩.modelformset可以迭代所有学生成绩,学生姓名是只读的,成绩是可编辑的字段.我喜欢使用modelformset获得的错误检查和错误报告的强大功能和便利性,但是让学生名称在这样的表单中可编辑是疯狂的.

由于专家django的共识是只读表单字段是一个坏主意,我想知道上面的示例学生级示例的标准django最佳实践是什么?

django django-models django-forms

27
推荐指数
2
解决办法
2万
查看次数

在modelformset工厂中使用自定义表单?

我希望能够在modelformset_factory中使用自定义表单.例如:

models.py

class Author(models.Model):
    name = models.CharField()
    address = models.CharField()

class AuthorForm(ModelForm):
   class Meta:
        model = Author
Run Code Online (Sandbox Code Playgroud)

views.py

def test_render(request):
    myModelFormset = modelformset_factory(Author)
    items = Author.objects.all()
    formsetInstance = myModelFormset(queryset = items)
    return render_to_response('template',locals())
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但请注意我没有使用AuthorForm.问题是如何让modelformset_factory使用AuthorForm(我计划稍后自定义)而不是制作默认的Author表单?

django django-models django-forms

12
推荐指数
1
解决办法
6626
查看次数

我怎样才能将eclipse自动插入subversion版本号放入我的代码中

我有兴趣在帮助页面中显示我的代码的版本号.理想情况下,我会使用Major.Minor.SVNrevision格式,其中自动提取SVNrevision编号.我希望?怀疑我可以访问某个地方的变量,但不知道它可能是什么.

任何提示?

eclipse subclipse svn

8
推荐指数
2
解决办法
9793
查看次数

Django Form中的奇怪行为(只读字段/小部件)

我正在编写测试应用程序的问题,我正在编写以验证一些Django功能.测试应用程序是一个小型的"等级书"应用程序,目前正在使用Alex Gaynor的只读字段功能http://lazypython.blogspot.com/2008/12/building-read-only-field-in-django.html

有两个问题可能是相关的.首先,当我在下面的这2行中翻转评论时:

#        myform = GradeForm(data=request.POST, instance=mygrade)
        myform = GradeROForm(data=request.POST, instance=mygrade)
Run Code Online (Sandbox Code Playgroud)

它的工作方式与我预期的一样,当然除了学生领域是可变的.

当评论以显示的方式显示时,"studentId"字段显示为数字(不是名称,问题1),当我点击提交时,我收到一条错误,指出studentId需要是Student实例.

我不知道如何解决这个问题.我并不喜欢Alex Gaynor的代码.任何代码都可以.我对Python和Django都比较陌生,所以我在网站上看到的"让一个只读字段变得容易"的提示仍然超出我的范围.

// models.py

class Student(models.Model):
    name = models.CharField(max_length=50)
    parent = models.CharField(max_length=50)
    def __unicode__(self):
        return self.name

class Grade(models.Model):
    studentId = models.ForeignKey(Student)
    finalGrade = models.CharField(max_length=3)

# testbed.grades.readonly is alex gaynor's code
from testbed.grades.readonly import ReadOnlyField
class GradeROForm(ModelForm):
    studentId = ReadOnlyField()
    class Meta:
        model=Grade

class GradeForm(ModelForm):
    class Meta:
        model=Grade
Run Code Online (Sandbox Code Playgroud)

// views.py

def modifyGrade(request,student):
    student = Student.objects.get(name=student)
    mygrade = Grade.objects.get(studentId=student)
    if request.method == "POST":
#        myform = GradeForm(data=request.POST, …
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms

4
推荐指数
1
解决办法
2397
查看次数

django中必填的只读字段

我正在写一本测试"成绩簿"应用程序.models.py文件如下所示.

class Student(models.Model):
    name = models.CharField(max_length=50)
    parent = models.CharField(max_length=50)
    def __unicode__(self):
        return self.name

class Grade(models.Model):
    studentId = models.ForeignKey(Student)
    finalGrade = models.CharField(max_length=3)
Run Code Online (Sandbox Code Playgroud)

我希望能够在一个模型中改变几个学生的最终成绩,但现在我只是尝试一个学生.我也试图为它创建一个表单,将学生姓名显示为一个无法更改的字段,这里唯一可以更改的是finalGrade.所以我用这个技巧让studentId只读.

class GradeROForm(ModelForm):
    studentId = forms.ModelChoiceField(queryset=Student.objects.all())
    def __init__(self, *args, **kwargs):
        super(GradeROForm,self).__init__(*args, **kwargs)
        instance = getattr(self, 'instance', None)
        if instance and instance.id:
            self.fields['studentId'].widget.attrs['disabled']='disabled'
    def clean_studentId(self):
        instance = getattr(self,'instance',None)
        if instance:
            return instance.studentId
        else:
            return self.cleaned_data.get('studentId',None)
    class Meta:
        model=Grade
Run Code Online (Sandbox Code Playgroud)

以下是我的看法:

def modifyGrade(request,student):
    student = Student.objects.get(name=student)
    mygrade = Grade.objects.get(studentId=student)
    if request.method == "POST":
        myform = GradeROForm(data=request.POST, instance=mygrade)
        if myform.is_valid():
            grade = myform.save() …
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms

3
推荐指数
1
解决办法
1948
查看次数

modelform失败is_valid没有设置form.errors

我正在使用模型来仅显示模型中的字段的子集.提交表单时,form.is_valid()失败,但form.errors为空.我不想在这里显示我的所有代码,但下面是一个示例:

模型和形式

class Videofiles(models.Model):
    active = models.CharField(max_length=9)
    filenamebase = models.CharField(max_length=180, primary_key=True, db_column='FilenameBase')
    program = models.CharField(max_length=60, db_column='Program') 
    displayname = models.CharField(max_length=150, db_column='DisplayName') 
    description = models.TextField(db_column='Description', blank=True) 
    tagskeywords = models.TextField(db_column='TagsKeywords', blank=True) 

    class Meta:
        db_table = u'legacyTable'

class VideoFilesForm(ModelForm):
    filenamebase = forms.CharField(max_length=30)
    displayname = forms.CharField(max_length=30)
    description = forms.CharField(max_length=30, required=False)
    tagskeywords = forms.CharField(max_length=60, required=False)

    class Meta:
        model=Videofiles
        fields=['filenamebase','displayname','description','tagskeywords']
Run Code Online (Sandbox Code Playgroud)

视图

def editClip(request, clipId):
    clip = Videofiles.objects.get(filenamebase=clipId)
    form = VideoFilesForm(instance=clip)
    if request.method == 'POST':
        if 'save' in request.POST:
            if form.is_valid():
                form.save()
            else:
                print form.errors
    return render_to_response('legacyDB/edit_clip.html',locals())
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms

3
推荐指数
1
解决办法
2438
查看次数