- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
模型.py
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
class website(models.Model):
uid = models.CharField(primary_key=True,max_length=40)
name= models.CharField(max_length=100,unique=True)
def __unicode__(self):
return unicode(self.uid)
class data(models.Model):
uuid=models.ForeignKey('website')
title=models.CharField(max_length=50)
def __unicode__(self):
return unicode(self.uuid)
@receiver(post_save,sender=website)
def my_handler(sender,instance,**kwargs):
p=data(uuid=instance.uid,title='it works!')
p.save()
每次在 website
表中创建/更新条目时,我想在 data
表中创建/更新条目。因为 uid 和之间存在外键关系uuid 当我尝试使用 uid='xyz' 在 website
表中创建条目时出现此错误:
Traceback:
File "C:\bunker\lib\site-packages\django\core\handlers\base.py" in get_response
112. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\bunker\lib\site-packages\django\contrib\admin\options.py" in wrapper
432. return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:\bunker\lib\site-packages\django\utils\decorators.py" in _wrapped_view
99. response = view_func(request, *args, **kwargs)
File "C:\bunker\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
52. response = view_func(request, *args, **kwargs)
File "C:\bunker\lib\site-packages\django\contrib\admin\sites.py" in inner
198. return view(request, *args, **kwargs)
File "C:\bunker\lib\site-packages\django\utils\decorators.py" in _wrapper
29. return bound_func(*args, **kwargs)
File "C:\bunker\lib\site-packages\django\utils\decorators.py" in _wrapped_view
99. response = view_func(request, *args, **kwargs)
File "C:\bunker\lib\site-packages\django\utils\decorators.py" in bound_func
25. return func(self, *args2, **kwargs2)
File "C:\bunker\lib\site-packages\django\db\transaction.py" in inner
371. return func(*args, **kwargs)
File "C:\bunker\lib\site-packages\django\contrib\admin\options.py" in add_view
1131. self.save_model(request, new_object, form, False)
File "C:\bunker\lib\site-packages\django\contrib\admin\options.py" in save_model
860. obj.save()
File "C:\bunker\lib\site-packages\django\db\models\base.py" in save
545. force_update=force_update, update_fields=update_fields)
File "C:\bunker\lib\site-packages\django\db\models\base.py" in save_base
582. update_fields=update_fields, raw=raw, using=using)
File "C:\bunker\lib\site-packages\django\dispatch\dispatcher.py" in send
185. response = receiver(signal=self, sender=sender, **named)
File "c:\bunker\codechef\mysite\img\models.py" in my_handler
58. p=data(uuid=instance.uid,title='aha!it works!')
File "C:\bunker\lib\site-packages\django\db\models\base.py" in __init__
405. setattr(self, field.name, rel_obj)
File "C:\bunker\lib\site-packages\django\db\models\fields\related.py" in __set__
339. self.field.name, self.field.rel.to._meta.object_name))
Exception Type: ValueError at /admin/img/website/add/
Exception Value: Cannot assign "u'xyz'": "data.uuid" must be a "website" instance.
我无法理解它,因为我正在使用 post_save 信号,所以这段代码应该可以工作,因为首先保存条目,然后调用信号。如何解决这个错误?
最佳答案
我在本地创建了项目。保存实例时,您应该使用 p=data(uuid_id=instance.uid,title='it works!')
(uuid_id
)。
>>> from test2 import models
>>> site = models.website(uid='123',name='test')
>>> site.save()
>>> models.website.objects.get()
<website: 123>
>>> models.data.objects.get()
<data: data object>
注意:类名要大写(Website, Data)
关于python - 使用 post_save 信号更新外键字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25973756/
考虑以下: class OrderForm(models.Model): title = models.CharField(max_length=100) desc = models
我有一个专门与管理员一起使用的应用程序。 我想在每次创建/修改新对象时发送一封电子邮件,从我的搜索来看,使用 post_save 似乎是最好的方法。 不幸的是,文档对此并不太清楚...... 有人可以
我有一个 post_save所有对象(不仅是我的应用程序)的信号,我在其中创建了一个 SignalInfo (此模型来自我的应用程序)对象,将有关创建/编辑对象的信息放入其中并保存。在我开始使用南迁移
我正在应用 post_save 信号来为每个对象应用用户权限,然后相应地过滤查询集。 我的模型是这样的: class Project(models.Model): # Relations wi
阅读文档后, https://docs.djangoproject.com/en/dev/topics/signals/ 我在我的signals.py文件中创建了这个: from django.db.
我需要在 Entry 的新实例时发送电子邮件模型是通过管理面板创建的。所以在 models.py我有: class Entry(models.Model): attachments = m
我有以下代码: @receiver(post_save, sender=SomeModel, dispatch_uid="build") def handle_creation(sender, ins
我已经编写了一些 API,它们各自的功能在事务 block 内执行。我调用save()一个/几个模型的实例上的方法(经过一些修改),并且还在中连续索引了该实例的一些JSON相关信息 Elasticse
我有一个名为 EmailUser 的自定义用户模型我正在尝试在 post_save 上分配自定义模型权限。我在 models.py 中有以下信号 @receiver(post_save, sender
我的模型位于单独的文件中: models \ |__init__.py |event.py |a_thing.py |... 在 __init__.py 中,我导入每个模型,然后设置信号处理。
我有一个个人资料模型,其中包含作为外国关键领域的经验和教育。当我访问个人资料模板时,它会抛出异常。 我尝试过 post_save, def create_education(sender, insta
Django 的 post_save 信号对使用多表继承的模型表现得很奇怪 当使用具有多表继承的模型时,我注意到 Django 的 post_save 信号的工作方式有一个奇怪的行为。 我有这两个模型
我有三个模型:User(来自django.contrib.auth.models)、UserProfile和GameCharacter >. 我设置了以下接收器,以便在创建User时,也会自动创建Us
所以我正在使用 django-simple-history 模块来跟踪模型实例中的变化。但是,它使用 post_save 信号来执行此操作。在我的项目中,我还需要它在 update() 上触发。 我的
所以我阅读了 Django 源代码(1.5 后),您现在可以将多个信号注册到接收器函数: def receiver(signal, **kwargs): """ A decorator
我有一个like 功能,就像社交网络的like 或thumbs up 功能一样;用户点击星号/心形/任何东西来标记喜欢的内容。这是用 ajax 完成的,必须很快。 这里唯一的问题是,由于某些原因,我必
我需要对 Django 中新创建的对象进行一些后台后处理。此后处理应仅在新对象上运行,而不是刚刚更新的对象。 我知道在 pre_save 中我可以检查对象是否有 id,如果没有则它是一个新对象。但问题
docs说: post_save django.db.models.signals.post_save created A boolean; True if a -new- record was cr
模型.py from django.db import models from django.db.models.signals import post_save from django.dispat
以下代码位于 Django 信号中,当副本数为“2”时,以下代码创建 80 多个副本,然后崩溃......出了什么问题? def internal_signal(sender, instance, s
我是一名优秀的程序员,十分优秀!