Django ModelForm никогда не передает is_valid()
Я новичок в Django и сейчас пытаюсь сохранить данные, введенные из формы, в модели/базе данных. Проблема, как мне кажется, заключается в том, что я не хочу, чтобы все поля модели были доступны на форме. В моей модели есть следующие поля:
description = models.TextField()
date_referred = models.DateTimeField(default=timezone.now)
full_name = models.CharField(max_length=100)
email = models.EmailField(max_length=100)
phone_number = models.CharField(max_length=17, blank=True)
column_number = models.IntegerField()
notes = models.TextField()
colour = models.CharField(max_length=6)
user = models.ForeignKey(User, on_delete=models.CASCADE)
МодельФормы, которую я использую, выглядит следующим образом:
class ReferralForm(ModelForm):
class Meta:
model = kanban_item
fields = ["item_name", "description", "full_name", "email", "phone_number"]
Код внутри файла views.py следующий:
def submit_referrals(request):
form = ReferralForm()
if request.method == "POST":
form = ReferralForm()
print(request.POST)
if form.is_valid():
print("VALID")
referral = form.save(commit=False)
referral.user = request.user
referral.column_number = 0
referral.colour = "ffffff"
referral.save()
else :
print ("NOT VALID")
Как вы можете видеть, я пытаюсь создать модель из формы, затем добавить дополнительные поля и затем сохранить модель в базе данных. Это не работает, поскольку всякий раз, когда я отправляю форму, мой код не проходит дальше метода is_valid на форме.
Любые предложения или ответы будут признательны, так как я потерялся, спасибо.
Вам необходимо построить ReferralForm
с данными (request.POST
) и, возможно, с файлами (request.FILES
).
Форма Form
без данных называется "unbounded", а не ограниченные формы всегда недействительны. Таким образом, вы создаете форму с данными с помощью:
def submit_referrals(request):
form = ReferralForm()
if request.method == "POST":
form = ReferralForm(request.POST, request.FILES) # 🖘 add data and files
if form.is_valid():
print("VALID")
referral = form.save(commit=False)
referral.user = request.user
referral.column_number = 0
referral.colour = "ffffff"
referral.save()
else :
print ("NOT VALID")