Ber*_*ant 10 django inline admin foreign-keys django-signals
我使用名为的自定义用户配置文件扩展了Django的用户模型UserExtension.它通过一个独特的ForeignKey Relationship与User相关,这使我能够以内嵌形式在admin中编辑它!我正在使用信号为每个新用户创建一个新的配置文件:
def create_user_profile(sender, instance, created, **kwargs):
if created:
try:
profile, created = UserExtension.objects.get_or_create(user=instance)
except:
pass
post_save.connect(create_user_profile, sender=User)
Run Code Online (Sandbox Code Playgroud)
(如此处所述:在Django中使用自定义字段扩展用户模型)问题是,如果我通过管理员创建新用户,则在保存"列user_id不唯一"时会出现IntegritiyError.似乎信号被调用两次,但我想管理员试图保存配置文件AFTERWARDS?但是如果我在系统的其他部分创建一个新用户,我需要通过信号创建!
Kil*_*nDS 15
django之后会创建管理实例是正常的,因为保存总是包含以下内容:
保存User对象时,django ORM无法知道创建配置文件对象将在它之后,因此它不会以任何方式延迟post_save信号(甚至没有意义).
如果你想保留post_save信号,处理这个(imho)的最好方法是覆盖这样的save方法UserExtension:
def save(self, *args, **kwargs):
try:
existing = UserExtension.objects.get(user=self.user)
self.id = existing.id #force update instead of insert
except UserExtension.DoesNotExist:
pass
models.Model.save(self, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
请注意,这会强制每个指向与现有对象相同的用户的插入变为更新,这可能是其他代码部分的意外行为.
| 归档时间: |
|
| 查看次数: |
4612 次 |
| 最近记录: |