gpt4 book ai didi

python - 如何为django modelform字段设置动态初始值

转载 作者:行者123 更新时间:2023-12-05 06:36:10 25 4
gpt4 key购买 nike

我是 django 的新手,我需要为我的 modelform 字段设置一个动态初始值。我的模型名称“author”中有一个数据库字段,它有一个将它连接到 django 用户模型的外键。每当用户在表单中填写信息时,我都需要自动将其设置为当前用户。根据我收集到的关于这个问题的信息,我必须在下面的 MyHouseEditForm 中定义一个 __init__ 函数,我是 django 的新手,我看到的所有示例都非常困惑。

表单.py

from django import forms
from django.contrib.auth.models import User
from .models import Myhouses

class MyHouseEditForm(forms.ModelForm):
class Meta:
model = Myhouses
fields = ('author','name_of_accomodation', 'type_of_room', 'house_rent', 'availability', 'location', 'nearest_institution', 'description', 'image')

我需要在用户登录时将“author”的值设置为当前用户。

模型.py

from django.db import models
from django.contrib.auth.models import User



class Myhouses(models.Model):
author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name='author')
Available = 'A'
Not_Available = 'NA'
Availability = (
(Available, 'Available'),
(Not_Available, 'Not_Available'),
)
name_of_accomodation = models.CharField(max_length=200)
type_of_room = models.CharField(max_length=200)
house_rent = models.IntegerField(null=True)
availability = models.CharField(max_length=2, choices=Availability, default=Available,)
location = models.CharField(max_length=200)
nearest_institution = models.CharField(max_length=200)
description = models.TextField(blank=True)
image = models.ImageField(upload_to='profile_image')


def __str__(self):
return self.name_of_accomodation

View .py

@login_required
def addlisting(request):
if request.method == 'POST':
form = MyHouseEditForm(request.POST, files=request.FILES)
if form.is_valid():
Houses = form.save(commit=False)
Houses.save()
return redirect('addlisting')
else:
form = MyHouseEditForm()

return render(request, 'houses/addlisting.html', {'form':form })

最佳答案

无需在表单中显示作者字段。它会自动填充登录用户。

request.user 为您提供登录用户对象。因此,您可以从表单字段部分删除提交的“作者”并执行此操作:

Houses = form.save(commit=False)
Houses.author = request.user
Houses.save()

关于python - 如何为django modelform字段设置动态初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245618/

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