gpt4 book ai didi

python - CreateView 创建两个模型对象

转载 作者:行者123 更新时间:2023-12-01 09:09:22 26 4
gpt4 key购买 nike

我创建了一个Form ,其中用户设置 Alarm目的。 Alarm对象按预期保存到数据库中。然而问题是:另一个对象,它只包含 Form 中填写的信息。 ,也保存到数据库。

据我了解,form_valid()对于 CreateView保存表格。我已经尝试了 another query 中建议的两种解决方案没有成功。我怀疑该问题是由 return super().form_valid(form) 引起的或通过 Alarm.objects.create()create_alarm_object() .

Views.py

class AlarmCreateView(LoginRequiredMixin, CreateView):
""" CreateView for User to create the Alarm object """
model = Alarm
form_class = SetAlarmForm
template_name = 'weather_alarm/set_alarm.html'
login_url = "/login/"

def form_valid(self, form):
self.create_alarm_object(request, form)
return super().form_valid(form)

def get_success_url(self, **kwargs):
return reverse("weather_alarm:active-alarm", kwargs={'pk':self.object.pk})

def create_alarm_object(self, request, form):
""" Function to get User's location from IP and create Alarm object """
...
alarm_object = Alarm.objects.create(
alarm_id=uuid.uuid4(),
user=self.request.user,
timezone=user_timezone,
city=location.raw['address']['city'],
country=location.raw['address']['country'],
time=form.cleaned_data['time'].astimezone(pytz.timezone(user_timezone)),
temp_conditional=form.cleaned_data['temp_conditional'],
surf_conditional=form.cleaned_data['surf_conditional'],
temp_max=form.cleaned_data['temp_max'],
temp_min=form.cleaned_data['temp_min'],
surf_max=form.cleaned_data['surf_max'],
surf_min=form.cleaned_data['surf_min'],
)
alarm_object.save()

最佳答案

你已经调试正确了。对 form_validsuper 调用和 create_alarm_object 方法正在创建两个对象。

正如您在 form_valid method implementation 中看到的那样,它保存表单并使用 success_url 返回一个 HttpResponseRedirect 对象。

不要重写 form_valid 方法,或者使用以下代码。

解决方案:

def form_valid(self, form):
self.create_alarm_object(self.request, form)
return HttpResponseRedirect(self.get_success_url())

编辑:

更新 create_alarm_object 方法以设置 self.object 并删除多余的 save 调用。

def create_alarm_object(self, request, form):
self.object = Alarm.objects.create(...)
# no `save` call needed, `create` already creates and returns the saved object.

关于python - CreateView 创建两个模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51795121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com