Tôi có thể tạo trường quản trị không bắt buộc trong Django mà không cần tạo biểu mẫu không?


83

Mỗi khi tôi nhập một trình phát mới trong phần Quản trị của Django, tôi nhận được thông báo lỗi cho biết "Trường này là bắt buộc.".

Có cách nào để tạo một trường không bắt buộc mà không cần phải tạo một biểu mẫu tùy chỉnh không? Tôi có thể thực hiện việc này trong models.py hoặc admin.py không?

Đây là lớp của tôi trong models.py trông như thế nào.

class PlayerStat(models.Model):
    player = models.ForeignKey(Player)

    rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts"
        )
    rushing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Yards"
        )
    rushing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Touchdowns"
        )
    passing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Passing Attempts"
        )

Cảm ơn


4
Cách đơn giản nhất là sử dụng tùy chọn trường blank = True ( docs.djangoproject.com/en/dev/ref/models/fields/#blank ). Có một lý do tại sao điều đó sẽ không hoạt động?
Platinum Azure

Câu trả lời:


162

Chỉ cần đặt

blank=True

trong mô hình của bạn, tức là:

rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True
        )

Lưu ý rằng nếu bạn sử dụng "biểu mẫu", giá trị trống = true sẽ không hoạt động. Ví dụ: ở đây khoảng trống = true từ mô hình sẽ không hoạt động: lớp MusModelForm (các biểu mẫu.ModelForm): tên = các biểu mẫu.CharField (tiện ích = biểu mẫu.Textarea) # ~ mitglieder = các biểu mẫu.CharField (tiện ích = biểu mẫu.Textarea) lớp Meta: model = Nhạc sĩ
Timo

6

Sử dụng blank = True, null = True

class PlayerStat(models.Model):
    player = models.ForeignKey(Player)

    rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True,
        null=True
        )
    rushing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Yards",
        blank=True,
        null=True
        )
    rushing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Touchdowns",
        blank=True,
        null=True
        )
    passing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Passing Attempts",
        blank=True,
        null=True
        )

3
Bạn không nên cần "null = True" trên CharFields ít nhất từ ​​Django 1.6 trở đi, thậm chí có thể sớm hơn. Tương tự đối với TextField, SlugField, EmailField, ... bất cứ thứ gì được lưu trữ dưới dạng văn bản.
jenniwren

Django không khuyến nghị "null = True" cho các trường chứa đúng văn bản.
kas

1
@Paullo "Tránh sử dụng null trên các trường dựa trên chuỗi như CharField và TextField. Nếu trường dựa trên chuỗi có null = True, điều đó có nghĩa là nó có hai giá trị có thể có cho" không có dữ liệu ": NULL và chuỗi trống. Trong hầu hết trường hợp, sẽ dư thừa nếu có hai giá trị có thể có cho "không có dữ liệu;" quy ước Django là sử dụng chuỗi trống, không phải NULL. Một ngoại lệ là khi CharField có cả tập hợp unique = True và blank = True. Trong trường hợp này, null = True là bắt buộc để tránh vi phạm ràng buộc duy nhất khi lưu nhiều đối tượng với trống các giá trị. " docs.djangoproject.com/en/2.1/ref/models/fields/#null
Massood Khaari

1
Mặc dù cơ sở lý luận là không thuyết phục đối với tôi. :)
Massood Khaari

1
@MassoodKhaari Tôi hiểu ý bạn và tôi đồng ý với bạn rằng "cơ sở lý luận là không thuyết phục".
Paullo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.