Как установить model.field равным значению model.field foreignkey, если в форме не указано значение? [DJANGO]
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'),
]