Django - я хочу хранить данные 3 моделей в одной базе данных в phpmyadmin (MySQL)
Я создал 3 модели (страна, штат и город) и вводимые данные сохраняются в 3 разных таблицах. Я хочу сохранить эти данные в одной таблице со следующими колонками:
Models.py
class Country(models.Model):
id = models.AutoField(primary_key=True)
parent_id = models.IntegerField(null=False)
name = models.CharField(null=False, max_length=255)
status = models.CharField(null= True, choices=Status_Choices, max_length=11, default='--Select Status--')
added_by = models.IntegerField()
updated_by = models.IntegerField()
created_on = models.CharField(default=get_current_datetime_str , max_length=255)
updated_on = models.CharField(default=get_current_datetime_str, max_length=255)
def __str__(self):
return self.name
class State(models.Model):
parent = models.ForeignKey(Country, on_delete=models.CASCADE)
name = models.CharField(null=False, max_length=255)
def __str__(self):
return self.name
class City(models.Model):
Country = models.ForeignKey(Country, on_delete=models.CASCADE)
state = models.ForeignKey(State, on_delete=models.CASCADE)
name = models.CharField(null=False, max_length=255)
def __str__(self):
return self.name
admin.py
from django.contrib import admin
from location.models import Country, State, City
from django import forms
from django.contrib import admin
class CountryAdmin(admin.ModelAdmin):
exclude = ('parent_id', 'created_on', 'updated_on', 'added_by', 'updated_by')
def save_model(self, request, obj, form, change):
user = request.user
# Check if the user is authenticated (i.e. logged in)
if user.is_authenticated:
# If the user is authenticated, set the added_by field to the user's ID
obj.added_by = user.id
else:
# The user is not authenticated, do something else
...
if change:
obj.updated_by = user.id
# Save the model instance
super().save_model(request, obj, form, change)
admin.site.register(Country, CountryAdmin)
@admin.register(State)
class StateAdmin(admin.ModelAdmin):
# Define the fields to be displayed in the list view of states
list_display = ('name', 'parent')
# Set the heading for the states page in the Django admin interface
verbose_name_plural = 'Locations'
@admin.register(City)
class StateAdmin(admin.ModelAdmin):
# Define the fields to be displayed in the list view of states
list_display = ('name', 'state')
# Set the heading for the states page in the Django admin interface
verbose_name_plural = 'Locations'
forms.py
from django import forms
from .models import Country, State, City
class CountryForm(forms.ModelForm):
class Meta:
model = Country
fields = ['name']
def clean_name(self):
name = self.cleaned_data['name']
if name == '--Select Country--':
raise forms.ValidationError("Please select a valid country")
return name
class StateForm(forms.ModelForm):
class Meta:
model = State
fields = ['name', 'parent']
class CityForm(forms.ModelForm):
class Meta:
model = City
fields = ['name', 'state']
Я пытался объединить их, но для этого мне нужно добавить дополнительный столбец для города и штата. Я хочу, чтобы все хранилось под именем, соответствующим их родительскому идентификатору (см. схему базы данных).
Пожалуйста, помогите мне, это срочно.