标签: django-models

Django:保存时,如何检查字段是否已更改?

在我的模型中,我有:

class Alias(MyBaseModel):
    remote_image = models.URLField(max_length=500, null=True, help_text="A URL that is downloaded and cached for the image. Only
 used when the alias is made")
    image = models.ImageField(upload_to='alias', default='alias-default.png', help_text="An image representing the alias")


    def save(self, *args, **kw):
        if (not self.image or self.image.name == 'alias-default.png') and self.remote_image :
            try :
                data = utils.fetch(self.remote_image)
                image = StringIO.StringIO(data)
                image = Image.open(image)
                buf = StringIO.StringIO()
                image.save(buf, format='PNG')
                self.image.save(hashlib.md5(self.string_id).hexdigest() + ".png", ContentFile(buf.getvalue()))
            except IOError :
                pass
Run Code Online (Sandbox Code Playgroud)

这首次remote_image变化很有效.

当有人修改remote_image了别名时,如何获取新图像?其次,是否有更好的方法来缓存远程图像?

django caching image django-models

273
推荐指数
13
解决办法
14万
查看次数

on_delete在Django模型上做了什么?

我对Django很熟悉,但最近注意到on_delete=models.CASCADE模型中存在一个选项,我搜索了相同的文档,但找不到更多:

在Django 1.9中更改:

on_delete现在可以用作第二个位置参数(以前它通常只作为关键字参数传递).它将是Django 2.0中的必需参数.

一个使用示例是

from django.db import models

class Car(models.Model):
    manufacturer = models.ForeignKey(
        'Manufacturer',
        on_delete=models.CASCADE,
    )
    # ...

class Manufacturer(models.Model):
    # ...
    pass
Run Code Online (Sandbox Code Playgroud)

on_delete做什么?(我想如果删除模型需要完成的操作)

怎么models.CASCADE办?(文档中的任何提示)

还有哪些其他选择(如果我的猜测是正确的)?

这个文档在哪里?

python django django-models

261
推荐指数
7
解决办法
14万
查看次数

Django auto_now和auto_now_add

对于Django 1.1.

我在models.py中有这个:

class User(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)

更新行时,我得到:

[Sun Nov 15 02:18:12 2009] [error] /home/ptarjan/projects/twitter-meme/django/db/backends/mysql/base.py:84: Warning: Column 'created' cannot be null
[Sun Nov 15 02:18:12 2009] [error]   return self.cursor.execute(query, args)
Run Code Online (Sandbox Code Playgroud)

我的数据库的相关部分是:

  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
Run Code Online (Sandbox Code Playgroud)

这引起关注吗?

附带问题:在我的管理工具中,这两个字段没有显示出来.这是预期的吗?

python django datetime django-models django-admin

249
推荐指数
8
解决办法
21万
查看次数

Django ORM中select_related和prefetch_related的区别是什么?

在Django doc中,

select_related() "跟随"外键关系,在执行查询时选择其他相关对象数据.

prefetch_related() 对每个关系进行单独查找,并在Python中进行"加入".

"在python中加入"是什么意思?有人能说明一个例子吗?

我的理解是,对于外键关系,使用select_related; 对于M2M关系,请使用prefetch_related.它是否正确?

python django django-models django-orm

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

如何克隆Django模型实例对象并将其保存到数据库?

Foo.objects.get(pk="foo")
<Foo: test>
Run Code Online (Sandbox Code Playgroud)

在数据库中,我想添加另一个对象,它是上面对象的副本.

假设我的表有一行.我想将第一行对象插入到具有不同主键的另一行中.我怎样才能做到这一点?

python django django-models

242
推荐指数
9
解决办法
11万
查看次数

Django Model()vs Model.objects.create()

运行两个命令之间的区别是什么:

foo = FooModel()
Run Code Online (Sandbox Code Playgroud)

bar = BarModel.objects.create()
Run Code Online (Sandbox Code Playgroud)

第二个是否立即BarModel在数据库中创建一个,而for FooModel,save()必须显式调用该方法以将其添加到数据库中?

python database django django-models

231
推荐指数
5
解决办法
17万
查看次数

如何删除Django模型中的记录?

我想删除一个特定的记录.如

delete from table_name where id = 1;
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做django model呢?

python django django-models

227
推荐指数
6
解决办法
21万
查看次数

Django设置默认表单值

我有一个模型如下.

class TankJournal(models.Model):
    user = models.ForeignKey(User)
    tank = models.ForeignKey(TankProfile)
    ts = models.IntegerField(max_length=15)
    title = models.CharField(max_length=50)
    body = models.TextField()
Run Code Online (Sandbox Code Playgroud)

我还有一个上述模型的模型表格如下.

class JournalForm(ModelForm):
    tank = forms.IntegerField(widget=forms.HiddenInput()) 

    class Meta:
        model = TankJournal
        exclude = ('user','ts')
Run Code Online (Sandbox Code Playgroud)

我想知道如何设置该坦克隐藏字段的默认值.这是我到目前为止显示/保存表单的函数

def addJournal(request, id=0):
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/')

    # checking if they own the tank
    from django.contrib.auth.models import User
    user = User.objects.get(pk=request.session['id'])

    if request.method == 'POST':
        form = JournalForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)

            # setting the user and ts
            from time import time
            obj.ts = int(time()) …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-forms

220
推荐指数
5
解决办法
22万
查看次数

Django:显示选择价值

模型:

class Person(models.Model):
    name = models.CharField(max_length=200)
    CATEGORY_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    gender = models.CharField(max_length=200, choices=CATEGORY_CHOICES)
    to_be_listed = models.BooleanField(default=True)
    description = models.CharField(max_length=20000, blank=True)
Run Code Online (Sandbox Code Playgroud)

views.py:

def index(request):
    latest_person_list2 = Person.objects.filter(to_be_listed=True)
    return object_list(request, template_name='polls/schol.html',
                       queryset=latest_person_list, paginate_by=5)
Run Code Online (Sandbox Code Playgroud)

在模板上,当我打电话给person.gender时,我得到'M'或'F'而不是'男'或'女'.如何显示值('男'或'女')而不是代码(M/F)?

python django django-templates django-models

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

将Django Model对象转换为dict,所有字段都保持不变

如何将django Model对象转换为包含其所有字段的dict ?理想情况下,所有内容都包含外键和带有editable = False的字段.

让我详细说明一下.假设我有一个类似以下的django模型:

from django.db import models

class OtherModel(models.Model): pass

class SomeModel(models.Model):
    normal_value = models.IntegerField()
    readonly_value = models.IntegerField(editable=False)
    auto_now_add = models.DateTimeField(auto_now_add=True)
    foreign_key = models.ForeignKey(OtherModel, related_name="ref1")
    many_to_many = models.ManyToManyField(OtherModel, related_name="ref2")
Run Code Online (Sandbox Code Playgroud)

在终端中,我做了以下事情:

other_model = OtherModel()
other_model.save()
instance = SomeModel()
instance.normal_value = 1
instance.readonly_value = 2
instance.foreign_key = other_model
instance.save()
instance.many_to_many.add(other_model)
instance.save()
Run Code Online (Sandbox Code Playgroud)

我想将其转换为以下字典:

{'auto_now_add': datetime.datetime(2015, 3, 16, 21, 34, 14, 926738, tzinfo=<UTC>),
 'foreign_key': 1,
 'id': 1,
 'many_to_many': [1],
 'normal_value': 1,
 'readonly_value': 2}
Run Code Online (Sandbox Code Playgroud)

回答不满意的问题:

Django:将一整套Model的对象转换为单个字典

如何将Django Model对象转换为字典并仍然拥有其外键?

python django dictionary django-models

215
推荐指数
8
解决办法
14万
查看次数