小编Ben*_*n S的帖子

如何在Django中向ModelForm添加外键字段?

我想要做的是显示一个让用户:

  • 输入文档标题(来自Document型号)
  • user_defined_code从下拉列表中选择其中一个选项(由UserDefinedCode模型填充)
  • 输入a unique_code(存储在Code模型中)

我不知道如何在表单中显示外键关系的字段.我知道在视图中你可以使用document.code_set(例如)来访问当前document对象的相关对象,但我不知道如何将它应用于ModelForm.

我的模特:

class UserDefinedCode(models.Model):
    name = models.CharField(max_length=8)
    owner = models.ForeignKey(User)

class Code(models.Model):
    user_defined_code = models.ForeignKey(UserDefinedCode)
    unique_code = models.CharField(max_length=15)

class Document(models.Model):
    title = models.CharField(blank=True, null=True, max_length=200)
    code = models.ForeignKey(Code)
    active = models.BooleanField(default=True)
Run Code Online (Sandbox Code Playgroud)

我的ModelForm

class DocumentForm(ModelForm):
    class Meta:
        model = Document
Run Code Online (Sandbox Code Playgroud)

django foreign-keys django-models django-forms

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

如何使用Haystack进行部分场匹配?

我需要一个简单的搜索工具来支持我的django网站,所以我选择了Haystack和Solr.我已经正确设置了所有内容,并且当我输入确切的短语时可以找到正确的搜索结果,但在键入部分短语时我无法获得任何结果.

例如:"John"返回"John Doe",但"Joh"不返回任何内容.

模型:

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

搜索索引:

class PersonIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    first_name = CharField(model_attr = 'first_name')
    last_name = CharField(model_attr = 'last_name')

site.register(Person, PersonIndex)
Run Code Online (Sandbox Code Playgroud)

我猜测有一些我缺少的设置可以实现部分字段匹配.我见过人们EdgeNGramFilterFactory()在一些论坛上谈论过,我用谷歌搜索过它,但我不太确定它的实现.另外,我希望有一个特定于干草堆的方式,以防万一我切换到搜索后端.

django search search-engine django-haystack

19
推荐指数
2
解决办法
6563
查看次数

如何使用Python/Django实现"撤消"功能

我有一个Django应用程序,我允许用户导入带有联系人数据的CSV文件(成员资格#,名字,姓氏等).

当他们导入文件时,应用程序会检查数据库是否有匹配的记录,并且:1)如果不存在匹配则插入新记录,或者2)使用新数据更新现有数据.

我的问题是:使用Django或直接Python实现撤销功能的最佳方法是什么,以便用户可以撤消导入操作并将多个记录恢复到原始状态?

我最初的想法是创建一个这样的表(伪代码):

Table HISTORY
   unique_id
   record_affected_id
   old_value
   new_value
Run Code Online (Sandbox Code Playgroud)

然后,如果用户单击"撤消",我可以查找与其事务关联的unique_id,并将受该事务影响的每条记录设置为old_value.

我想知道是否有一种更简单的方法可以做到这一点,我错过了,或者如果有人有这样的经历.

python django undo undo-redo

14
推荐指数
1
解决办法
3791
查看次数

验证Django中的唯一字段

我不知道我是否正在以正确的方式解决问题.预期结果是具有仅显示name和的表单description.一旦用户提交表单我想添加当前用户owner并检查是否已经有一个具有相同name和的条目user.如果有,我想返回有错误的表单.如果没有,我想保存Status.

我的模特:

class Status(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField(blank=True)
    owner = models.ForeignKey(User)
    active = models.BooleanField(default=True)

    class Meta:
        unique_together = ('name','owner')
Run Code Online (Sandbox Code Playgroud)

我的看法:

def settings_status(request):
    status_form = StatusForm()

    if request.method == 'POST':
        status_form = StatusForm(request.POST)
            if status_form.is_valid():
                new_status = Status()
                new_status.name = status_form.cleaned_data['name']
                new_status.description = status_form.cleaned_data['description']
                new_status.owner = request.user
                new_status.save()

    return render_to_response('base/settings_status.html',{
        'status_form'           :       status_form,
}, context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

我已经试了无数的东西,但我一直运行到这个问题,如果我添加owner到对象分开那么它是不是适用于模型的clean功能,因此不能被用来检查nameowner是唯一的.

django unique save

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

在django中过滤结果时,如何将DateTime对象与UNIX时间戳进行比较?

我正在使用JQuery的FullCalendar插件.

此插件将unix时间戳传递给url(开始和结束时间),然后用于查询数据库中的事件对象并提取属于start-end范围内的事件.

但是,我不断收到验证错误,因为我的数据库中的时间存储为日期时间,我将它们与之比较的值是UNIX时间戳.

如何在运行查询时比较这两个日期?

def fetch_events(request):
    start = request.GET.get('start')
    end = request.GET.get('end')
    e = Event.objects.filter(start__gte=start, end__lte=end).values('id','title','start','end')
    data = simplejson.dumps(list(e), cls=DjangoJSONEncoder)
    return HttpResponse(data)
Run Code Online (Sandbox Code Playgroud)

unix django datetime timestamp fullcalendar

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

将参数传递给Django ModelForm清理方法

我试图将一个参数传递给我的ModelForm的clean方法,以便我可以对某些数据执行一些额外的验证.

在我的views.py文件中,我有:

page_data = page_form.cleaned_data(foo="bar")
Run Code Online (Sandbox Code Playgroud)

在我的clean_url方法中,我有:

def clean_url(self, **kwargs):
    url = self.cleaned_data['url']

    if kwargs['foo'] == url:
        query = FlatPage.objects.filter(url=url)
        if query.exists():
            raise forms.ValidationError(("This url is already being used by the '%s' page.") % (query[0].title))

    return url
Run Code Online (Sandbox Code Playgroud)

我一直得到一个KeyError foo.我不知道我在这里犯了什么错误,因为我之前已经通过了kwarg变量,但从来没有采用过干净的方法.

django modelform

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

如何遍历Django模板中的泛型关系?

我想遍历我的Django模板中的泛型关系,类似于如何遍历FK关系.

Models.py

class Company(models.Model):
    name = models.CharField(blank=True, max_length=100)
    notes = models.TextField(blank=True)

class Address(models.Model):
    address = models.TextField(max_length=200)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
Run Code Online (Sandbox Code Playgroud)

这在我的模板中似乎不起作用:

{{ company.address_set.all }}
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.

django django-templates generic-relationship

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