Как установить 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'),
]
Вернуться на верх