这个星期,我一直在尝试通过学习Google的各种教程来教自己一些新的东西。我碰到了一堵墙,在表格保存位,所以帮助你可以帮助。
基本上,我试图向用户提供输入他们的第一行地址的可能性,以便Google提交地址建议。
这第一个比特可以工作(当我输入地址的第一行时,我会得到一个建议列表)。
然而,当我试图保存表单时,它似乎没有被保存到任何地方。我也没有收到任何错误信息(如果有的话,我得到的是一个“成功的信息”,我应该收到的时候,表单是成功提交)。
我想可能有一个字段无法在html中填充。所以我试着清空一个,试着保存。但在这一次,我收到了一条错误消息,表示字段丢失了。这使我觉得这与表单中的字段无关,但可能是如何将表单保存在views.py中的。
我必须承认,我在这里已经走出了我的舒适区域(事实证明,ajax很难工作,我所要做的就是遵循教程.),所以我不会惊讶于我没有捕捉到您需要帮助的所有代码。如果是的话,让我知道你需要看什么。
Views.py
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
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
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)发布于 2022-08-05 14:29:21
有趣的是你得到了你的成功信息。您的问题可能是将用户实例传递给期望配置文件模型的表单(但不确定为什么不抛出错误):
# 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 instancehttps://stackoverflow.com/questions/73251063
复制相似问题