【发布时间】:2021-04-03 16:43:21
【问题描述】:
我正在使用 django 开发一个商业网站。登录的用户可以创建列表。我正在使用 django 模型为表单创建模型和 ModelForm。
models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
pass
class Listing(models.Model):
title = models.CharField(max_length=100)
description = models.TextField(max_length=500)
starting_bid = models.IntegerField()
image_url = models.URLField(blank=True)
category = models.CharField(max_length=15, blank=True)
listed_by = models.ForeignKey(User, on_delete=models.CASCADE)
Listing(models.Model) 的最后一个字段用于存储列出列表的用户,该列表应基于当前登录的用户。
forms.py
from django import forms
from .models import Listing
class ListingForm(forms.ModelForm):
class Meta:
model = Listing
fields = ["title", "description", "starting_bid", "image_url", "category"]
没有listed_by 字段的forms.py 按预期工作。
views.py
def create(request):
"""Renders a Form to Create a Listing"""
if request.method == "POST":
# Create a form instance and populate it with data from the request:
form = ListingForm(request.POST)
if form.is_valid():
# Save a new Listing object from the form's data.
listing = form.save()
# Redirects the users to the main page
return HttpResponseRedirect(reverse("index"))
# If the form is not valid, render the template with errors
return render(request, 'auctions/create_listing.html', {"form": form})
# Create a form instance and pass it to the template
form = ListingForm()
return render(request, "auctions/create_listing.html", {"form": form})
在这里,我对我如何处理这个表单进行了分类。
问题
当我想将当前登录的用户链接到Listing 模型时,我的问题就出现了,所以我搜索了一些答案,但不幸的是,由于我使用的是 ModelForm,我并没有消除我的顾虑。
我尝试了什么? 我已经阅读了这方面的文档以及其中的 stackoverflow 的答案:
建议的链接是解决我的问题的最佳方法吗?如果是这样,我应该如何使用它?我应该在 models.py、forms.py 还是 views.py 中使用它?
有更好的方法吗?
【问题讨论】:
标签: django django-models django-forms