如果表单中没有提供值,如何将 model.field 设置为等于外键的 model.field 值?[金戈]


class Album(TimeStampedModel):
name = models.CharField(default='New Album' , max_length = 80)
release_datetime = models.DateTimeField(blank = False)
cost = models.DecimalField(blank = False, decimal_places = 2,max_digits = 15)
artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
is_approved = models.BooleanField(default=False)
def __str__(self):
return (f"id: {self.id} n name: {self.name} cost: {self.cost} n approved : {self.is_approved}")

class Song(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE)
name = models.CharField(blank = True , max_length = 80)
image =  models.ImageField(blank = False)
thumbnail = ImageSpecField(format='JPEG')

如果表单中提供的名称为"=",则我想使Song.name=album.name"(空(我该怎么做提前感谢

class Song(models.Model):
# album = models.ForeignKey(Album, on_delete=models.CASCADE)
name = models.CharField(blank?album.name)
# image =  models.ImageField(blank = False)
# thumbnail = ImageSpecField(format='JPEG')

类似的东西

根据模型制作了一个表单。在其中检查名称字段是否为空,然后用相册中的名称填充。我故意留下了一份打印件,这样你就可以看到里面是什么样的数据。您可以在此处阅读有关验证的更多信息。

将bboard替换为放置模板的文件夹的名称(视图行:template_name='bboard/tam_form.html'(。

在视图中,我留下get_context_data,如果你想向上下文中添加一些东西(如果你删除了函数,那么一切都会正常工作(。

forms.py

from .models import Song
class MySong(ModelForm):
class Meta:
model = Song
fields = ('album', 'name', 'image')
def clean(self):
cleaned_data = super().clean()
field_name = cleaned_data.get('name')
if len(field_name) <= 0 or field_name == '':
aaa = cleaned_data['album'].name
cleaned_data['name'] = aaa
print('cleaned_data', cleaned_data)

views.py

class MyFormSong(CreateView):
template_name = 'bboard/tam_form.html'
form_class = MySong
success_url = reverse_lazy('song')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context

tam_form.html

<h2>form</h2>
<form method="post" action="{% url 'song' %}">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="adding">
</form>

urls.py

urlpatterns = [
path('song/', MyFormSong.as_view(), name='song'),
]

最新更新