相关疑难解决方法(0)

如何将计算字段添加到Django模型

我有一个简单的Employee模型,其中包括firstname, lastnamemiddlename领域.

在管理员方面,可能在其他地方,我想将其显示为:

lastname, firstname middlename
Run Code Online (Sandbox Code Playgroud)

对我来说,这样做的合理位置是在模型中通过创建一个计算字段:

from django.db import models
from django.contrib import admin

class Employee(models.Model):
    lastname = models.CharField("Last", max_length=64)
    firstname = models.CharField("First", max_length=64)
    middlename = models.CharField("Middle", max_length=64)
    clocknumber = models.CharField(max_length=16)
    name = ''.join(
        [lastname.value_to_string(),
        ',',
         firstname.value_to_string(),
        ' ',
         middlename.value_to_string()])

    class Meta:
        ordering = ['lastname','firstname', 'middlename']

class EmployeeAdmin(admin.ModelAdmin):
    list_display = ('clocknumber','name')
    fieldsets = [("Name", {"fields":(("lastname", "firstname", "middlename"), "clocknumber")}),
        ]

admin.site.register(Employee, EmployeeAdmin)
Run Code Online (Sandbox Code Playgroud)

最终我认为我需要的是将名称字段的值作为字符串.我得到的错误是value_to_string() takes exactly 2 arguments (1 given).字符串想要的值self, obj …

python django-models django-admin

46
推荐指数
4
解决办法
5万
查看次数

Django:在更新调用中为文本字段使用F表达式

在django视图中,我需要将字符串数据附加到数据库中现有文本列的末尾.因此,例如,假设我有一个名为"ATable"的表,并且它有一个名为"aField"的字段.我希望能够以无竞赛条件的方式将字符串附加到"aField"的末尾.最初,我有这个:

tableEntry = ATable.objects.get(id=100)
tableEntry.aField += aStringVar
tableEntry.save()
Run Code Online (Sandbox Code Playgroud)

问题在于,如果同时执行此操作,两者都可以获得相同的"tableEntry",则它们各自独立更新,最后一个"保存"获胜,丢失另一个附加的数据.

我对此进行了一些研究,并使用F表达式找到了这个,我希望它可以工作:

ATable.objects.filter(id=100).update(aField=F('aField') + aStringVar)
Run Code Online (Sandbox Code Playgroud)

这里的问题是,我得到一个SQL错误,说:

operator does not exist: text + unknown
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

尝试更改为"str(aStringVar)",即使它已经是一个字符串 - 没有运气..我发现一些django错误报告抱怨类似的问题,但我没有看到修复或解决方法.有没有什么方法可以转换aStringVar,以便它可以附加到F表达式的文本?BTW - 也试过"str(F('aField'))+ aStringVar"但是将F表达式的结果转换为字符串"(DEFAULT :)".

django

22
推荐指数
3
解决办法
5633
查看次数

标签 统计

django ×1

django-admin ×1

django-models ×1

python ×1