首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尽管消息成功,django表单仍未保存。

尽管消息成功,django表单仍未保存。
EN

Stack Overflow用户
提问于 2022-08-05 14:07:47
回答 2查看 49关注 0票数 0

这个星期,我一直在尝试通过学习Google的各种教程来教自己一些新的东西。我碰到了一堵墙,在表格保存位,所以帮助你可以帮助。

基本上,我试图向用户提供输入他们的第一行地址的可能性,以便Google提交地址建议。

这第一个比特可以工作(当我输入地址的第一行时,我会得到一个建议列表)。

然而,当我试图保存表单时,它似乎没有被保存到任何地方。我也没有收到任何错误信息(如果有的话,我得到的是一个“成功的信息”,我应该收到的时候,表单是成功提交)。

我想可能有一个字段无法在html中填充。所以我试着清空一个,试着保存。但在这一次,我收到了一条错误消息,表示字段丢失了。这使我觉得这与表单中的字段无关,但可能是如何将表单保存在views.py中的。

我必须承认,我在这里已经走出了我的舒适区域(事实证明,ajax很难工作,我所要做的就是遵循教程.),所以我不会惊讶于我没有捕捉到您需要帮助的所有代码。如果是的话,让我知道你需要看什么。

Views.py

代码语言:javascript
复制
def is_ajax(request):
    return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'

def profile(request):
    result = "Error"
    message = "There was an error, please try again"
    form = profileform(instance = request.user) 
    Profile.objects.get_or_create(user=request.user)
    if is_ajax(request=request):
        form = profileform(data = request.POST, instance = request.user)
        if form.is_valid():
            obj = form.save()
            obj.has_profile = True
            obj.save()
            result = "Success"
            message = "Your profile has been updated"
        else:
            message = FormErrors(form)
        data = {'result': result, 'message': message}
        return JsonResponse(data)

    else:

        context = {'form': form}
        context['google_api_key'] = settings.GOOGLE_API_KEY
        context['base_country'] = settings.BASE_COUNTRY

    return render(request, 'main/profile.html', context)

Froms.py

代码语言:javascript
复制
from .models import Profile
class ProfileForm(forms.ModelForm):
    address = forms.CharField(max_length=100, required=True, widget = forms.HiddenInput())
    town = forms.CharField(max_length=100, required=True, widget = forms.HiddenInput())
    county = forms.CharField(max_length=100, required=True, widget = forms.HiddenInput())
    post_code = forms.CharField(max_length=8, required=True, widget = forms.HiddenInput())
    country = forms.CharField(max_length=40, required=True, widget = forms.HiddenInput())
    longitude = forms.CharField(max_length=50, required=True, widget = forms.HiddenInput())
    latitude = forms.CharField(max_length=50, required=True, widget = forms.HiddenInput())
    class Meta:
        model = Profile
        fields = ['address','town','county','post_code','country','longitude','latitude']

Models.py

代码语言:javascript
复制
class Profile(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    timestamp = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    address = models.CharField(verbose_name="Address",max_length=100, null=True, blank=True)
    town = models.CharField(verbose_name="Town",max_length=100, null=True, blank=True)
    county = models.CharField(verbose_name="County",max_length=100, null=True, blank=True)
    post_code = models.CharField(verbose_name="Post Code",max_length=8, null=True, blank=True)
    country = models.CharField(verbose_name="Country",max_length=100, null=True, blank=True)
    longitude = models.CharField(verbose_name="Longitude",max_length=50, null=True, blank=True)
    latitude = models.CharField(verbose_name="Latitude",max_length=50, null=True, blank=True)
    captcha_score = models.FloatField(default = 0.0)
    has_profile = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)

    def __str__(self):
        return str(self.user)
EN

Stack Overflow用户

发布于 2022-08-05 14:29:21

有趣的是你得到了你的成功信息。您的问题可能是将用户实例传递给期望配置文件模型的表单(但不确定为什么不抛出错误):

代码语言:javascript
复制
# capture the profile that is created with get_or_create
profile, created = Profile.objects.get_or_create(user=request.user)

if is_ajax(request=request):
    form = profileform(data = request.POST, instance=profile) # change instance
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73251063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档