django - Django 模型中的 OneToOne 字段

标签 django django-forms

我有一个与用户 (user_id) 相对应的 OneToOne 字段,在我的头像上传表单中,我得到了一个包含所有用户的下拉列表以选择一个,但我希望 django 用当前登录的用户填充它。此外,在提交表单时,对于某些用户,我收到此消息“该用户的配置文件已存在。”

对于第一个问题,我认为inline-formsets 是解决方案,但我不知道如何应用this到我的表格。我对第二个问题一无所知。每次创建新用户时,我都会使用信号创建配置文件,但我不知道如何更新它。我是 django 的新手。

这是我的模型的代码:

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar_img = models.ImageField(upload_to='avatars', blank=True)

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

形式:

from django import forms
from profiles.models import Profile

class AvatarForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ('user', 'avatar_img', )

和 View :

from django.shortcuts import render, redirect
from profiles.forms import AvatarForm

def model_form_upload(request):
    if request.method == 'POST':
        form = AvatarForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = AvatarForm()
    return render(request, 'profiles/avatar_form.html', {
        'form': form
    })

谢谢。

更新解决方案...我将其添加到表单中:

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['user'].widget.attrs['disabled'] = 'true'
    self.fields['user'].widget = HiddenInput()

最佳答案

您可以为表单使用初始参数。在您的 View 中创建表单对象时,您可以为您的表单提供一个初始参数。

在你看来。

这个

form = AvatarForm()

可以替换为

form = AvatarForm(initial={'user': request.user})

This引用应该对你有帮助。

关于django - Django 模型中的 OneToOne 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45741716/

相关文章:

Django AMQP 错误

django - 带有个人资料字段的注册表单

django - 编写自定义 Django 小部件的教程?

javascript - 从 jQuery 到 Django 的字典对象混淆!

django - 与Crispy表格一起使用ModelForm

django - 如何在 View 中包装 Django FormPreview

python - Django ModelForm 不允许必填字段为空值?

由于模板路径问题,django-ckeditor 失败

python - 错误通用详细 View 必须使用对象 pk 或 slug 调用,即使使用 pk

python - 使用 Django 中的自定义字段扩展 django.contrib.auth.models.User 模型